更改选项卡片段的值

时间:2015-04-27 14:06:56

标签: android android-fragments tabs

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

我想在更改标签时更改文字。 我正在使用创建本教程的标签:

Material Design Tabs

我在我的活动中捕获了使用此代码滚动的页面事件:

    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);
}

这就是该代码返回的内容:

java.lang.NullPointerException: Attempt to invoke virtual method 'void rafs.jess.TabFragmentFirst.setText(java.lang.String)' on a null object reference

我不知道我应该为这段代码做些什么 如果有人能回答我,我将不胜感激。

2 个答案:

答案 0 :(得分:0)

想象一下你的Tab有3个孩子,试试这个:

foo2.h

答案 1 :(得分:0)

private final SlidingTabStrip mTabStrip;

mTabStrip是标签的容器,实际上是LinearLayout,所以如果你想要更改第二个标签的文本而不是使用mTabStrip.getChildAt(1);来返回一个视图,那么只需找到你的textView并设置你的文字,以下是更改所需职位文本的通用功能。

修改

  

打开课程SlidingTabLayout(可以在图书馆项目中找到,或者如果您已在项目中添加)添加以下功能并从您的电话中调用   要更新标签的片段/活动。

public void setText(String text, int tabPosition) {
        View tabView = mTabStrip.getChildAt(tabPosition);
        TextView tabTitleView = (TextView) tabView.findViewById(mTabViewTextViewId);
        tabTitleView.setText(text);
    }