簡體   English   中英

更改標簽片段的值

[英]Change Value of a tab fragment

我在運行時更改選項卡的文本值時遇到問題,我在堆棧溢出時嘗試了每個答案,所有答案都解決了它。

我想在更改選項卡時更改文本。 我正在使用本教程創建選項卡:

物料設計選項卡

我捕獲了活動中使用以下代碼滾動的頁面事件:

    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

我不知道應該為該代碼工作做什么,如果有人可以回答我,我將不勝感激。

假設您的Tab有3個孩子,請嘗試以下操作:

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); 它將返回一個視圖,因此只需找到您的textView並設置您的文本,以下是用於更改所需位置的文本的通用功能。

編輯

打開類SlidingTabLayout (可以在庫項目中找到,或者如果您已經在項目中添加了),則添加以下函數,並從片段/活動中調用要更新選項卡的位置。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM