gpt4 book ai didi

android - 从 ViewPager 更新 fragment

转载 作者:IT王子 更新时间:2023-10-28 23:42:33 28 4
gpt4 key购买 nike

我有一个带有 ViewPagerActivity。我还有一个 Dialog 将检索包含用户将选择的一些项目的列表。现在,如何更新项目应该显示为附加到该 fragment 的新 View 的 Fragment

这是我的 ViewPager 的适配器:

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

的方法
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);

}


}

最佳答案

Update Fragment from ViewPager

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

调用的时候调用这个方法

notifyDataSetChanged()

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

因此,如果您需要更新 Fragment,您可以这样做:

  • 总是从 getItemPosition() 方法返回 POSITION_NONE。它哪个表示:“必须始终重新创建 fragment ”
  • 你可以创建一些 update() 方法来更新你的 fragment ( fragment 将自己处理更新)

第二种方法的示例:

public interface Updateable {
public void update();
}


public class MyFragment extends Fragment implements Updateable {

...

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

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

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

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

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

注意:值得考虑一下您将采用哪种方法。

关于android - 从 ViewPager 更新 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18088076/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com