在Activity和ViewPager片段之间进行通信

时间:2016-04-22 16:27:13

标签: android android-fragments android-activity android-viewpager

如下图所示,我的Activity内有ViewPagerTabLayout}。 现在,我想刷新TextView ViewPagerFragment的文字。我怎么能这样做?

http://imgur.com/0kWQCfx [对不起图片链接,但我还没有足够的声誉。]

我已经尝试过这样的事情:

//In Activity
View root = getLayoutInflater().inflate(R.layout.fragment_home, null);
TextView textView = (TextView) root.findViewById(R.id.text_view);
textView.setText("test");

但是我得到了NullPointerException的textView。

编辑1: 我只需要访问一个Fragment中的组件,所以我没有在Adapter中使用一个数组。 我将ViewPagerAdapter更改为:

public class ViewPagerAdapter extends FragmentPagerAdapter {
    public HomeFragment fragment;

    ...

    @Override
    public Fragment getItem(int position) {
        switch (position) {
            case 0:
                return fragment = new HomeFragment();
            case 1:
                ...
            default:
                return null;
        }
    }

但我仍然在这里得到NullPointerException

final Fragment root = viewPagerAdapter.fragment;
Log.d("testtest", String.valueOf(root == null));

3 个答案:

答案 0 :(得分:1)

将此代码写入您要更改片段值的活动中。您的片段ID是例如my_fragment

Fragment frag = getFragmentManager().findFragmentById(R.id.my_fragment)
((TextView) frag.getView().findViewById(R.id.text_view)).setText(s);

答案 1 :(得分:0)

您可以创建自己的适配器:

private class YourAdapter extends FragmentPagerAdapter implements ViewPager.OnPageChangeListener
{
    Fragment screens[];
    public CheckinHistoryAdapter(FragmentManager fm) {
        super(fm);
        screens = new Fragment[3];
        screens[0] = new CoachFragment();
        screens[1] = new LogingFragment();
        screens[2] = new HistoryFragment();
    }

@Override
public Fragment getItem(int index) {
    if(index <= screens.length)
    {
        return screens[index];
    }
    return null;
}

@Override
public int getCount() {
    return screens.length;
}

}

像这样使用

mViewPager.setAdapter(this.mPagerAdapter);

您可以使用getItem方法访问片段对象。

答案 2 :(得分:0)

如果您只需要引用一个片段,那么只需使用传递到position的{​​{1}}参数,并仅为所需位置指定片段参考:

instantiateItem()