Android 更改选项卡时SetText不工作
我有一个SlidingTabLayout,每次选择不同的页面(片段)时,我都试图更改settext 我正试图通过碎片本身来做到这一点。总共有3个,我是通过在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
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位于mymainactivity.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));
}
}