0

我有一个 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);

}

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

4

3 回答 3

0

教程和源代码可 在此处此处获得。

为了在滑动选项卡时更改选项卡名称,您需要检查片段中当前选项卡的内容,您可以检查是否调用了片段的 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 ;

    }
于 2015-03-16T04:38:45.110 回答
0

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

调用findViewByIdusinggetActivity()是指从添加了当前 Fragment 的 Activity 布局中访问 View。

如果TextView在 Fragment 布局内,则使用getView()View返回的对象onCreateView从布局访问视图:

 @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 访问视图,请确保setContentView在将 Fragment 添加到 Activity 之前通过传递布局 id 进行调用:

TextView textView = (TextView)getActivity().findViewById(R.id.pageName);
于 2015-03-16T04:42:21.580 回答
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 的标题文本。

于 2015-03-16T05:16:38.970 回答