8

ご挨拶、

TabActivity の現在選択されているタブをクリックすると、Click イベントを取得しようとしています。onTabChangedHandler は、現在アクティブなタブがクリックされた場合ではなく、タブが変更されたときにのみ呼び出されます。デバッガーは、TabHost 内の TabWidget に onClickListener が登録されていることを通知します。

間違ったビューに登録していますか?

また、タブのコンテキスト メニューを作成できず、そのコンテンツのみを作成できません。この問題は関連していますか?

public class TestDroidViewTab extends TabActivity 
                              implements TabContentFactory
                              , OnTabChangeListener, OnClickListener {

  private static final String LOG_KEY = "TEST";
  ListView listView;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      final TabHost tabHost = getTabHost();


      TabHost.TabSpec ts = tabHost.newTabSpec("ID_1");
      ts.setIndicator("1"); 
      ts.setContent(this);
      tabHost.addTab(ts);

      ts = tabHost.newTabSpec("ID_2");
      ts.setIndicator("2"); 
      ts.setContent(this);
      tabHost.addTab(ts);

      ts = tabHost.newTabSpec("ID_3");
      ts.setIndicator("3"); 
      ts.setContent(this);
      tabHost.addTab(ts);
      tabHost.setOnClickListener(this);
      tabHost.setOnTabChangedListener(this);
  }
  public void onClick(View v) {
      Log.d(LOG_KEY, "OnClick");
  }

  public void onTabChanged(String tabId) {
      Log.d(LOG_KEY, "OnTabChanged");
  }
4

4 に答える 4

19

特定のタブがクリックされたことを確認したい場合は、TabHost ではなく、タブ自体にリスナーを追加する必要があります。

タブの実装におけるビューの階層は次のとおりです。

  • タブホスト
    • タブウィジェット
      • (タブ)
      • (タブ)
    • フレームレイアウト

タブは実行時に以下を呼び出して追加されます。tabHost.addTab(tabHost.newTabSpec(""));

次に、次のように呼び出して、個々のタブへのハンドルを取得できます。getTabWidget().getChildAt(4);

OnClickListener本質的に、TabWidget の子にあなたを追加しています。個々のタブでクリックを拾うことができるようになりました。ただし、これは、タブがクリックされたときにコンテンツを変更するデフォルトの動作をオーバーライドします。したがって、コンテンツを変更するOnClickListenerには、それを行う必要があります。

クリック イベントをインターセプトし、タブの下のコンテンツを変更できる完全な例を次に示します。

final String myTabTag = "My Tab";
final int myTabIndex = 3;

getTabHost().addTab( getTabHost().newTabSpec(myTabTag) );

getTabWidget().getChildAt(myTabIndex).setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        if (getTabHost().getCurrentTabTag().equals(myTabTag)) {
            getTabHost().setCurrentTab(myTabIndex );
        }
    }
});
于 2010-05-21T19:17:11.697 に答える
10

;)setOnTabChangedListenerの代わりに使用OnClickListener

    static TabHost tabHost;

    tabHost = getTabHost();


    tabHost.setOnTabChangedListener(new OnTabChangeListener() {
       @Override
      public void onTabChanged(String arg0) {
       Log.i("******Clickin Tab number ... ", "" + tabHost.getCurrentTab());
      }     
});  
于 2010-02-05T01:41:15.797 に答える
2

あなたの句は間違っています。使用してください:

...

if (getTabHost().getCurrentTabTag().equals(myTabTag) == false) {
            getTabHost().setCurrentTab(myTabIndex );
   }

...

于 2010-06-21T14:34:30.217 に答える