Android 紧急情况:更新viewpager中有两个片段的1个片段

Android 紧急情况:更新viewpager中有两个片段的1个片段,android,listview,android-fragments,android-viewpager,Android,Listview,Android Fragments,Android Viewpager,我在主要活动中有一个viewpager。在viewpager中,我有两个片段A和B。片段A有一个新闻主题的列表视图。当你点击listview上的每个项目时,新闻的内容会显示在片段B上。 我的想法是,每当单击每个项目时,都在listview适配器中设置CurrentItem()。但我发现它不起作用。片段B不在片段A的listview上显示第二条新闻的内容。这意味着viewpager不更新片段B的内容 有人能告诉我如何解决这个问题吗 提前谢谢 您可以使用外部接口在活动和片段之间传递数据。您不应该在片

我在主要活动中有一个viewpager。在viewpager中,我有两个片段A和B。片段A有一个新闻主题的列表视图。当你点击listview上的每个项目时,新闻的内容会显示在片段B上。 我的想法是,每当单击每个项目时,都在listview适配器中设置CurrentItem()。但我发现它不起作用。片段B不在片段A的listview上显示第二条新闻的内容。这意味着viewpager不更新片段B的内容

有人能告诉我如何解决这个问题吗


提前谢谢

您可以使用外部接口在活动和片段之间传递数据。您不应该在片段之间直接对话,而是使用活动作为代理。示例如下:

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();
}

你能发布一些代码吗?你有没有办法通过触摸片段A中的一个项目来更新片段B?我在谷歌上搜索了很多,但都没用。请帮我看看我的答案,它比好用得多。老实说,非常感谢你。我对这些问题困惑了好几天,你让我很开心。祝你过得愉快。不客气:)如果你喜欢,请接受我的回答