更改选项卡时,SetText不起作用

时间:2015-03-16 04:33:58

标签: android android-fragments fragmentstatepageradapter pagerslidingtabstrip

我有一个SlidingTabLayout,每次选择不同的页面(片段)时我都会尝试更改settext。

我试图通过片段本身来做到这一点。我总共有3个,我是通过致电getActivity()

中的onCreateView来做到这一点的

应用程序不会崩溃,但这会导致选项卡在每个选项卡上显示错误的选项卡名称。它们没有问题,可以根据点击的订单显示两次名称。

我不确定我做错了什么。这是我目前的代码:

标签1-3:

@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

    TextView textView = (TextView)getActivity().findViewById(R.id.pageName);
    textView.setText("Tab X");

    return inflater.inflate(R.layout.discover_fragment,container,false);

}

如果需要,我可以显示更多代码。感谢所有帮助。

3 个答案:

答案 0 :(得分:0)

教程和源代码可用herehere

为了在滑动选项卡时更改选项卡名称,您需要检查片段中当前选项卡的内容,您可以检查是否调用了片段的onResume方法,现在在onResume中您需要更新当前文本标签

初始化

时,您未提及 TextView

这样做

    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        View view =inflater.inflate(R.layout.discover_fragment,container,false);
        TextView textView = (TextView)view.findViewById(R.id.pageName);
        textView.setText("Tab X");

        return view ;

    }

答案 1 :(得分:0)

  

应用程序不会崩溃,但这会导致显示标签   每个标签上的标签名称不正确。

使用findViewById调用getActivity()表示访问活动布局中的视图,其中添加了当前片段。

如果TextView位于Fragment布局中,则使用从getView()返回的ViewonCreateView对象来访问布局中的视图:

 @Override
    public View onCreateView(LayoutInflater inflater,ViewGroup container, 
                                                      Bundle savedInstanceState) {

        View view =inflater.inflate(R.layout.discover_fragment,container,false);
        TextView txtView = (TextView)view.findViewById(R.id.pageName);
        txtView.setText("Tab X");
        return view;
    }

如果想要从Activity访问视图,请确保在将Fragment添加到Activity之前通过传递布局ID来调用setContentView

TextView textView = (TextView)getActivity().findViewById(R.id.pageName);

答案 2 :(得分:0)

打开SlidingTabLayout.java,并在课程开头添加此行:

private ArrayList<TextView> mTextView = new ArrayList<>();

tabTitleView.setText(adapter.getPageTitle(i));

之类的下方添加此行
mTextView.add(tabTitleView);

最后,添加此方法:

public void changeTitle(int position) {
    final PagerAdapter adapter = mViewPager.getAdapter();
    TextView tv = mTextView.get(position);
    if (tv != null) {
        tv.setText(adapter.getPageTitle(position));
    }
}

现在,您可以致电changeTitle(0)更改标签0的标题文字。