Android 更改选项卡时SetText不工作

Android 更改选项卡时SetText不工作,android,android-fragments,fragmentstatepageradapter,pagerslidingtabstrip,Android,Android Fragments,Fragmentstatepageradapter,Pagerslidingtabstrip,我有一个SlidingTabLayout,每次选择不同的页面(片段)时,我都试图更改settext 我正试图通过碎片本身来做到这一点。总共有3个,我是通过在onCreateView 应用程序不会崩溃,但这会导致选项卡在每个选项卡上显示不正确的选项卡名称。它们的顺序不正确,可以根据单击的顺序显示名称两次 我不确定我做错了什么。以下是我当前的代码: 表1-3: @Override public View onCreateView(LayoutInflater inflater, @Nullable

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

我正试图通过碎片本身来做到这一点。总共有3个,我是通过在
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);

}

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

教程和源代码可用 和

为了在滑动选项卡时更改选项卡名称,您需要检查片段中的当前选项卡。如果片段的onResume方法被调用,您可以检查,现在在onResume中,您需要更新当前选项卡的文本

初始化时,您没有引用您的文本视图

你喜欢这样吗

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

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

使用
getActivity()
调用
findViewById
意味着从添加了当前片段的活动布局访问视图

如果
TextView
位于片段布局内,则使用
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;
    }

如果要从“活动”访问视图,请确保在将片段添加到“活动”之前通过传递布局id调用
setContentView

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

打开slidengtablayout.java,并在类的开头添加以下行:

private ArrayList<TextView> mTextView = new ArrayList<>();
最后,添加此方法:

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

现在,您可以调用
changetTitle(0)
来更改选项卡0的标题文本。

在访问该布局中的任何UI元素之前,必须先膨胀该布局
inflater.inflate()
函数应该先执行。它在“textview.setText(“Tab X”);”行上给了我一个nullpointerexception。@SolomonPowell:您在哪个布局中有
textview
哪个
pageName
id?您的意思是我的textview在哪个布局中?
pagename
textview位于my
mainactivity.xml
布局中。这3个选项卡是显示在mainactivity中的片段。它在“textview.setText(“Tab X”);”行上给了我一个nullpointerexception。@SolomOpwell请确保您的布局discover_fragment.xml中有id“pageName”。
pageName
id位于包含
discover_fragment.xml
片段的布局中。是否有需要更改的内容?我应该在哪里调用
changetTitle(0)
?您可以在任何地方引用您的幻灯片选项卡。例如,
slidingTabs=(SlidingTabLayout)findViewById(R.id.sliding_选项卡);滑动选项卡更改标题(0)
将更改选项卡0的文本。我尝试在片段的选项卡内部调用它,如下所示
SlidingTableOut tabs=(SlidingTableOut)view.findViewById(R.id.tabs);tabs.changetTitle(0)
在我的第一个选项卡中,但当我试图调用
tabs.changetTitle(0)
时,它给了我一个nullpointerexception?无需担心。编译器出现错误。他成功了。谢谢
public void changeTitle(int position) {
    final PagerAdapter adapter = mViewPager.getAdapter();
    TextView tv = mTextView.get(position);
    if (tv != null) {
        tv.setText(adapter.getPageTitle(position));
    }
}