2012-02-21 6 views
8

私は TabActivityの現在選択されているタブをクリックするとClickイベントを取得しようとしています。既に選択されているタブボタンのクリックを検出する方法

私は以下のコードを試しましたが、1つのタブをクリックすると、他のタブは正しく動作していません。

setupTab(new TextView(this), "Map"); 
    setupTab(new TextView(this), "Attacks"); 
    setupTab(new TextView(this), "Profile"); 
    setupTab(new TextView(this), "Headquater"); 

    int numberOfTabs = tabHost.getTabWidget().getChildCount(); 
    for(int t=0; t<numberOfTabs; t++){ 
    getTabWidget().getChildAt(t).setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 

       if(tabHost.getCurrentTab() == 0){ 
        Toast.makeText(TabContext, ""+"i m in on clickkkkk" ,1500).show(); 
        getTabHost().setCurrentTab(0); 
       } 
       if(tabHost.getCurrentTab() == 1){ 
        Toast.makeText(TabContext, ""+"i m in on clickkkkk....$#@$#$" ,1500).show(); 
        getTabHost().setCurrentTab(1); 
       } 

      } 
     }); 
    } 

答えて

9

1つのタブで2回目のクリックを検出する必要があるため、this answerが私のために働いていました。そのトリックは、子のためのOnClickを設定することであり、TabHost自体のためのものではありません。

for(int i = 0; i < TOTAL_TAB; i++) { 
    tabHost.getTabWidget().getChildAt(i).setOnTouchListener(this); 
    tabHost.getTabWidget().getChildAt(i).setTag(i+""); 
} 

あなたリスナー:あなたののonCreateメソッド内

getTabWidget().getChildAt(0).setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     Log.i("TAG", "Clicked tab : "+getTabHost().getCurrentTabTag()); 
     tabHost.setCurrentTab(0);          
    } 
}); 
+0

これは、複雑なtabhostのために、完璧に動作するためにコード内のコメントを読むために、リスナーをtabhostする混乱の原因となります/フラグメント設定。ありがとう! – MacD

1


@Override

public boolean onTouch(View v, MotionEvent event) { 
    if(MotionEvent.ACTION_DOWN == event.getAction()) { 
     previousTab = tabHost.getCurrentTab(); 
     currentTab = Integer.parseInt((String)v.getTag()); 
     if(previousTab == currentTab) { 
      if(currentTab == 0){ 
       Log.i("log", "0th same tab selected"); 
      }else if(currentTab == 1){ 
       Log.i("log", "1st same tab selected"); 
      }else if(currentTab == 2){ 
       Log.i("log", "2nd same tab selected"); 
      }else if(currentTab == 3){ 
       Log.i("log", "3rd same tab selected"); 
      } 
      return true; 
     } 
    } 
    return false; 
} 
+1

とうんTabHost tabHost = getTabHost(); –

3

私はtheczechseを使用なぜなら子供にリスナーを追加していないタブのホスト自体への軽微な変更ではなくnsationソリューションは、より良い分類

mTabHost.getTabWidget().getChildAt(0).setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       // re enforce selecting targeted tab to re apply main listener to default behaviour 
       mTabHost.setCurrentTab(0); 
       // display current tab tag in console 
       Log.i("MainActivity", "Clicked tab : "+mTabHost.getCurrentTabTag()); 
       // identify targeted fragment 
       Fragment currentFragment = new "FragmentClassName"(); 
       // execute navigation (fragment transaction) 
       fragmentManager.beginTransaction() 
         .replace(R.id.content_frame, currentFragment) 
         .commit(); 
       // re enforce selecting targeted tab to re apply main listener to default behaviour 
       mTabHost.setCurrentTab(0); 
      } 
     }); 
関連する問題