web-dev-qa-db-ja.com

Android=でボタンクリックを使用してプログラムでタブを切り替える方法

私はこれに数日間苦しんでいます。ボタンをクリックするとプログラムでタブを切り替えようとしています。タブを使用してアクティビティを変更しただけではプログラムは問題なく動作しますが、onClickメソッドをsetCurrentTabに接続するとエラーが発生します。これは機能しない方法です。これはかなり基本的で簡単な機能ですが、ボタンクリックをタブの切り替えに接続しようとする人々のドキュメントや例はあまり見かけません。ありがとう。

ImageButton next = (ImageButton) findViewById(R.id.ButtonAsk);
 next.setOnClickListener(new View.OnClickListener() 
         {         
  public void onClick(View view)  
             {

                TabHost tabHost =  (TabHost) findViewById(Android.R.id.tabhost);
              tabHost.setCurrentTab(2);                
             }
         });

エラーログの編集履歴を参照してください。

21
user552797

次に、onClick()内に配置できるコード例を示します。マークとケビンが説明したとおりです。

    TabActivity tabs = (TabActivity) getParent();
    tabs.getTabHost().setCurrentTab(2);

私はこのコードを何度も使用しています。これが明確になることを願っています。

26
Scott Biggs

現在のアクティビティに_@Android:id/tabhost_のウィジェットはありません。したがって、findViewById()はnullを返し、setCurrentTab()の呼び出しは失敗します。

さて、私の推測では、タブにアクティビティを配置しているためです。タブにViewsを入れていれば、コードは機能します。また、コードが高速になり、占有するヒープ領域が少なくなり、スタック領域が不足するリスクが軽減されます。

現在の実装を使い続けたい場合は、getParent().findViewById()だけでなくfindViewById()を呼び出してみてください。

17
CommonsWare

2017年の回答

ここでの他の回答は古くなっているようです。 タブ付きのスワイプビューの作成 のドキュメントでは、 TabLayoutViewPager を併用することを推奨しています。

これを行うためのコードの一部の実装を次に示します。

public class MainActivity extends AppCompatActivity {

    private ViewPager mViewPager;
    private Button mButton;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        // ...

        mViewPager = (ViewPager) findViewById(R.id.fieldspager);

        // ...

        mButton.setOnClickListener(myButtonClickHandler);
    }


    View.OnClickListener myButtonClickHandler = new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            mViewPager.setCurrentItem(2, true);
        }
    };
}

上記のコードから、タブをプログラムで設定することは次のように行われます:

mViewPager.setCurrentItem(2, true); // set it to the third tab

ここに別の実装があります ビューページャーとタブレイアウトの設定方法の詳細。

8
Suragch

これは私のために働く

getActionBar().setSelectedNavigationItem(0);

pdate:質問のコードにコードを挿入して、コンテキストを増やします...

ImageButton next = (ImageButton) findViewById(R.id.ButtonAsk);
next.setOnClickListener(new View.OnClickListener()
{
    public void onClick(View view)
    {
        getActionBar().setSelectedNavigationItem(2);
    }
});
7
Paul