更改选项卡片段的值
Change Value of a tab fragment
我在运行时更改选项卡的文本值时遇到一些问题,我尝试了堆栈溢出时的每个答案,并且任何答案都解决了它。
我想在更改标签时更改文本。
我在本教程中用于创建选项卡:
并且我在 activity:
中捕获了使用此代码滚动的页面事件
toolbar = (Toolbar) findViewById(R.id.tool_bar);
setSupportActionBar(toolbar);
// Creating The ViewPagerAdapter and Passing Fragment Manager, Titles fot the Tabs and Number Of Tabs.
adapter = new ViewPagerAdapter(getSupportFragmentManager(),Titles,Numboftabs);
// Assigning ViewPager View and setting the adapter
pager = (ViewPager) findViewById(R.id.pager);
pager.setAdapter(adapter);
tabs = (SlidingTabLayout) findViewById(R.id.tabs);
tabs.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
TabFragmentFirst frags = (TabFragmentFirst) getSupportFragmentManager().findFragmentById(R.id.Frag1);
frags.setText("Test");
}
@Override
public void onPageSelected(int position) {
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
在片段内部我有:
public void setText(String text) {
this.text = text;
TextView txt = (TextView)getView().findViewById(R.id.textView);
txt.setText(text);
}
这就是代码 returns:
java.lang.NullPointerException: Attempt to invoke virtual method 'void rafs.jess.TabFragmentFirst.setText(java.lang.String)' on a null object reference
我不知道我应该为这个代码工作做些什么
如果有人能回答我,我将不胜感激。
假设您的 Tab 有 3 个 children 并试试这个:
public static void updateTextTabHost(TabHost tabHost)
{
TextView textview0 = (TextView)tabHost.getTabWidget()
.getChildAt(0).findViewById(android.R.id.title);
TextView textview1 = (TextView) tabHost.getTabWidget()
.getChildAt(1).findViewById(android.R.id.title);
TextView textview2 = (TextView) tabHost.getTabWidget()
.getChildAt(2).findViewById(android.R.id.title);
textview0.setText("yourTest0");
textview1.setText("yourTest1");
textview2.setText("yourTest2");
}
private final SlidingTabStrip mTabStrip;
mTabStrip
是选项卡的容器,实际上是 LinearLayout 所以如果你想更改第二个选项卡的文本而不是使用 mTabStrip.getChildAt(1);
它将 return 一个视图所以只需找到你的textView 并设置您的文本,下面是更改所需位置文本的通用功能。
编辑
Open class SlidingTabLayout
(can find in library project or if you have added in your project) add below function and call from your
fragment/activity where you want to update your tabs.
public void setText(String text, int tabPosition) {
View tabView = mTabStrip.getChildAt(tabPosition);
TextView tabTitleView = (TextView) tabView.findViewById(mTabViewTextViewId);
tabTitleView.setText(text);
}
我在运行时更改选项卡的文本值时遇到一些问题,我尝试了堆栈溢出时的每个答案,并且任何答案都解决了它。
我想在更改标签时更改文本。 我在本教程中用于创建选项卡:
并且我在 activity:
中捕获了使用此代码滚动的页面事件 toolbar = (Toolbar) findViewById(R.id.tool_bar);
setSupportActionBar(toolbar);
// Creating The ViewPagerAdapter and Passing Fragment Manager, Titles fot the Tabs and Number Of Tabs.
adapter = new ViewPagerAdapter(getSupportFragmentManager(),Titles,Numboftabs);
// Assigning ViewPager View and setting the adapter
pager = (ViewPager) findViewById(R.id.pager);
pager.setAdapter(adapter);
tabs = (SlidingTabLayout) findViewById(R.id.tabs);
tabs.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
TabFragmentFirst frags = (TabFragmentFirst) getSupportFragmentManager().findFragmentById(R.id.Frag1);
frags.setText("Test");
}
@Override
public void onPageSelected(int position) {
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
在片段内部我有:
public void setText(String text) {
this.text = text;
TextView txt = (TextView)getView().findViewById(R.id.textView);
txt.setText(text);
}
这就是代码 returns:
java.lang.NullPointerException: Attempt to invoke virtual method 'void rafs.jess.TabFragmentFirst.setText(java.lang.String)' on a null object reference
我不知道我应该为这个代码工作做些什么 如果有人能回答我,我将不胜感激。
假设您的 Tab 有 3 个 children 并试试这个:
public static void updateTextTabHost(TabHost tabHost)
{
TextView textview0 = (TextView)tabHost.getTabWidget()
.getChildAt(0).findViewById(android.R.id.title);
TextView textview1 = (TextView) tabHost.getTabWidget()
.getChildAt(1).findViewById(android.R.id.title);
TextView textview2 = (TextView) tabHost.getTabWidget()
.getChildAt(2).findViewById(android.R.id.title);
textview0.setText("yourTest0");
textview1.setText("yourTest1");
textview2.setText("yourTest2");
}
private final SlidingTabStrip mTabStrip;
mTabStrip
是选项卡的容器,实际上是 LinearLayout 所以如果你想更改第二个选项卡的文本而不是使用 mTabStrip.getChildAt(1);
它将 return 一个视图所以只需找到你的textView 并设置您的文本,下面是更改所需位置文本的通用功能。
编辑
Open class
SlidingTabLayout
(can find in library project or if you have added in your project) add below function and call from your fragment/activity where you want to update your tabs.
public void setText(String text, int tabPosition) {
View tabView = mTabStrip.getChildAt(tabPosition);
TextView tabTitleView = (TextView) tabView.findViewById(mTabViewTextViewId);
tabTitleView.setText(text);
}