如下图所示,我的Activity
内有ViewPager
(TabLayout
}。
现在,我想刷新TextView
ViewPager
中Fragment
的文字。我怎么能这样做?
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));
答案 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()