更改选项卡片段的值

Change Value of a tab fragment

我在运行时更改选项卡的文本值时遇到一些问题,我尝试了堆栈溢出时的每个答案,并且任何答案都解决了它。

我想在更改标签时更改文本。 我在本教程中用于创建选项卡:

Material Design Tabs

并且我在 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);
    }