紧急:从viewpager更新1片段有两个片段
我在主要活动中有一个viewpager。在viewpager里面,我有2个片段A和B.片段A有一个新闻主题的列表视图。当你点击listview中的每个项目时,新闻的内容就会显示在片段B上。 我的想法是在每次点击每个项目时在列表视图适配器中设置当前项目()。但我发现它不起作用。片段B没有在片段A的listview上显示第二条新闻的内容。这意味着viewpager不会更新片段B的内容紧急:从viewpager更新1片段有两个片段
有人可以告诉我如何解决这个问题吗?
在此先感谢。
您可以使用外部接口在活动和片段之间传递数据。您不应该直接在片段之间进行交谈,请使用Activity作为代理。下面的实施例:
MainActivity.java
public class MainActivity extends AppCompatActivity implements InteractionInterface {
private ViewPager viewPager;
private MyAdapter adapter;
@Override
public void onCreate(Bundle instance) {
super.onCreate(instance);
setContentView(R.layout.activity_main);
viewPager = (ViewPager) findViewById(R.id.viewPager);
adapter = new MyAdapter(getSupportFragmentManager());
viewPager.setAdapter(adapter);
}
private class MyAdapter extends FragmentStatePagerAdapter {
private FragmentA fragmentA;
private FragmentB fragmentB;
public MyAdapter(FragmentManager fm) {
super(fm);
fragmentA = new FragmentA();
fragmentB = new FragmentB();
}
@Override
public Fragment getItem(int position) {
return position == 0 ? fragmentA : fragmentB;
}
@Override
public int getCount() {
return 2;
}
}
@Override
public void onClick() {
// this comes from InteractionInterface
if(adapter.fragmentB.isAdded()) {
adapter.fragmentB.doSomething("yeah!!");
}
}
}
FragmentA.java
public class FragmentA extends Fragment {
private Button button;
private InteractionInterface interface = null;
@Override
public View onCreateView(final LayoutInflater inflater, @Nullable final ViewGroup container, @Nullable final Bundle savedInstanceState) {
final View rootView = inflater.inflate(R.layout.fragment_a, container, false);
button.setOnClickListener(new OnClickListener() {
public void onClick(final View v) {
if(interface != null) {
// you can modify this interface to pass some data
interface.onClick();
}
}
});
return rootView;
}
public void onAttach(Activity a) {
super.onAttach(a);
if (a instanceof InteractionInterface) {
interface = (InteractionInterface) a;
}
}
public void onDetach() {
super.onDetach();
interface = null;
}
}
FragmentB.java
public class FragmentB extends Fragment {
...
public void doSomething(String something) {
// do stuff here
}
}
InteractionInterface.java
public interface InteractionInterface {
void onClick();
}
它比好的效果更好。诚实地说,非常感谢你。有些日子我对这个问题感到困惑,而且你让我度过了一天。祝你有个好日子.. – user6478182
不客气:)如果你喜欢,请接受我的回答 – pawelo
你能发表一些代码吗? – pawelo
您是否有任何想法通过触摸片段A中的项目来更新片段B?我在谷歌搜索了很多,但它不起作用。请帮助 – user6478182
看看我的回答 – pawelo