从 ViewPager 更新片段 [英] Update Fragment from ViewPager
问题描述
我有一个带有 ViewPager
的 Activity
.我还有一个 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
fromgetItemPosition()
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屋!