更改选项卡时 SetText 不起作用

SetText not working when Changing tabs

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

我正试图通过片段本身来做到这一点。我总共有 3 个,我在 onCreateView

中调用 getActivity()

应用程序没有崩溃,但这会导致选项卡在每个选项卡上显示不正确的选项卡名称。它们是乱序的,可以根据点击的顺序显示两次名称。

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

选项卡 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);

}

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

教程和源代码可用 herehere.

为了在滑动标签时更改标签名称,您需要检查当前标签在片段中说的是什么,您可以检查片段的 onResume 方法是否被调用,现在在 onResume 中,您需要更新文本您当前的 Tab.

您在初始化

时没有引用您的 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 ;

    }

The application does not crash, but this causes the tabs to display the incorrect tab name on each tab.

使用 getActivity() 调用 findViewById 表示从添加了当前 Fragment 的 Activity 布局访问视图。

如果 TextView 在 Fragment 布局中,则使用 getView()View 对象(来自 onCreateView 的 return 从布局访问视图:

 @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);

打开您的 SlidingTabLayout.java,然后在 class 的开头添加此行:

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 的标题文本。