从 ViewPager 更新片段 [英] Update Fragment from ViewPager

查看:33
本文介绍了从 ViewPager 更新片段的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个带有 ViewPagerActivity.我还有一个 Dialog 将检索一个列表,其中包含用户将选择的一些项目.现在,我如何更新 Fragment 中的项目应该显示为附加到此 Fragment 的新视图?

I have an Activity with a ViewPager. I also have a Dialog that will retrieve a list with some items that the user will choose. Now, how can I update the Fragment where the Items are supposed to display as new views attached to this Fragment?

这是我的 ViewPager 的适配器:

Here is my ViewPager's adapter:

public static class MyAdapter extends FragmentPagerAdapter {
    public MyAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public int getCount() {
        return 1;
    }

    @Override
    public android.support.v4.app.Fragment getItem(int position) {
        switch (position) {
        case 0:
            return new Fragment1();

        default:
            return null;
        }
    }
}

现在,这是Fragment:

public class Fragment1 extends Fragment{

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onActivityCreated(savedInstanceState);
}

@Override
public void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
}

@Override
public ViewGroup onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    ViewGroup view = (ViewGroup)inflater.inflate(R.layout.screen1, container, false);
    }
    return view;
}

}

这是我想用来将项目添加到我的 Fragment

This is the method that I want to use to add Items to my Fragment

private void addItem() {

    // Instantiate a new "row" view.

    final ViewGroup[] newViews = new ViewGroup[selectedItems.length];


    for(int i = 0; i < selectedItems.length; i++){
        newViews[i] = (ViewGroup) LayoutInflater.from(this).inflate(
                    R.layout.animated_layout_item, mContainerView, false);

        // Set the text in each new row.
        ((TextView) newViews[i].findViewById(android.R.id.text1)).setText(selectedItems[i]);

        // Because mContainerView has android:animateLayoutChanges set to true,
        // adding this view is automatically animated.

            mContainerView.addView(newViews[i], 0);


        // Set a click listener for the "X" button in the row that will remove the row.
        OnClickListener listener = new MyAddItemListener(newViews[i], mContainerView, this);
        newViews[i].findViewById(R.id.delete_button).setOnClickListener(listener);

    }


}

推荐答案

从 ViewPager 更新片段

Update Fragment from ViewPager

你需要实现getItemPosition(Object obj)方法.

调用时调用此方法

notifyDataSetChanged()

在您的 ViewPagerAdaper 上.此方法隐式返回 POSITION_UNCHANGED 值,其含义如下:Fragment 是它应该在的地方,所以不要改变任何东西."

on your ViewPagerAdaper. Implicitly this method returns POSITION_UNCHANGED value that means something like this: "Fragment is where it should be so don't change anything."

所以如果你需要更新Fragment,你可以这样做:

So if you need to update Fragment you can do it with:

  • 总是从 getItemPosition() 方法返回 POSITION_NONE.它哪个意思是:必须始终重新创建片段"
  • 您可以创建一些 update() 方法来更新您的片段(片段将自行处理更新)
  • Always return POSITION_NONE from getItemPosition() method. It which means: "Fragment must be always recreated"
  • You can create some update() method that will update your Fragment(fragment will handle updates itself)

第二种方法的例子:

public interface Updateable {
   public void update();
}


public class MyFragment extends Fragment implements Updateable {

   ...

   public void update() {
     // do your stuff
   }
}

在 FragmentPagerAdapter 中,您将执行以下操作:

And in FragmentPagerAdapter you'll do something like this:

@Override
public int getItemPosition(Object object) {
   MyFragment f = (MyFragment ) object;
   if (f != null) {
      f.update();
   }
  return super.getItemPosition(object);
}

如果你选择第一种方法,它看起来像:

And if you'll choose first approach it can looks like:

@Override
public int getItemPosition(Object object) {
   return POSITION_NONE;
}

注意:值得考虑您将采用哪种方法.

Note: It's worth to think a about which approach you'll pick up.

这篇关于从 ViewPager 更新片段的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆