更改选项卡时 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);
}
如果需要,我可以显示更多代码。感谢所有帮助。
为了在滑动标签时更改标签名称,您需要检查当前标签在片段中说的是什么,您可以检查片段的 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 的标题文本。
我有一个 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);
}
如果需要,我可以显示更多代码。感谢所有帮助。
为了在滑动标签时更改标签名称,您需要检查当前标签在片段中说的是什么,您可以检查片段的 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 的标题文本。