OnClickListener на Вкладках, не работающих

Поздравления,

Я пытаюсь получить Щелчок - событие при нажатии на в настоящее время выбираемую вкладку моего TabActivity. onTabChangedHandler только называют каждый раз, когда вкладка изменяется, не, если в настоящее время активная Вкладка нажата. Отладчик говорит мне, что у меня есть onClickListener, Зарегистрированный для TabWidget в моем TabHost.

Я регистрируюсь для неправильного Представления?

Кроме того, я не могу создать Контекстное меню для Вкладок, только для его содержания, эта проблема связана?

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");
  }
8
задан Tofeeq Ahmad 30 January 2012 в 09:00
поделиться

3 ответа

используйте setOnTabChangedListener вместо OnClickListener ; )

    static TabHost tabHost;

    tabHost = getTabHost();


    tabHost.setOnTabChangedListener(new OnTabChangeListener() {
       @Override
      public void onTabChanged(String arg0) {
       Log.i("******Clickin Tab number ... ", "" + tabHost.getCurrentTab());
      }     
});  
10
ответ дан 5 December 2019 в 05:26
поделиться

Если вы хотите видеть, что была нажата определенная вкладка, вам нужно добавить слушателя к самой вкладке, а не к TabHost.

Иерархия представлений в реализации вкладки следующая:

  • TabHost
    • TabWidget
      • (tab)
      • (tab)
    • FrameLayout

Вкладки добавляются во время выполнения путем вызова: 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 );
        }
    }
});
19
ответ дан 5 December 2019 в 05:26
поделиться

Ваше предложение неверно, используйте:

...

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

...

2
ответ дан 5 December 2019 в 05:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: