2012-01-17 6 views
-1

私はタブホストを3つのタブで実装しており、機能しています。私は、同じタブをクリックするときに戻る方法があるかどうかを知りたかったのですが、リセットのような初期状態に戻りますか?クリック時のリセットタブ

各タブのメソッド "setOnClickListener"を使用してこれを行い、新しいアクティビティを取得することができましたが、アクティビティの通過に気付くので問題はありません。

おかげ

+0

can plz explain ?? – Sumant

+0

あなたの問題は何か、あなたが私たちに期待していることははっきりしません。あなたの問題が何であるかを簡単に説明してください。 – kosa

+0

新しいアクティビティを作成せずにタブをクリックするとその内容が再起動されます – Kiotto

答えて

1

は、私は1つの醜い簡単な方法と1つのより複雑な方法を持っています。

// Re-clickable (active) tabs 
    getTabWidget().getChildAt(0).setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if (tabHost.getCurrentTab() == 0) { 
       // Try this : 
       tabHost.setCurrentTab(1); // Ugly easy way 
       tabHost.setCurrentTab(0); 

       // Or do this : 
       SomeActivityGroup.group.onResume(); // More complex way 
      } else { 
       tabHost.setCurrentTab(0); 
      } 
     } 
    } 

私は少し時間がありますが、好きな場合は後でActivityGroupコードを投稿することもできます。

**ここでは次のようになります。

import java.util.ArrayList; 

import android.app.ActivityGroup; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 

public class SomeActivityGroup extends ActivityGroup { 

    View rootView; 

    // Keep this in a static variable to make it accessible for all the nested 
    // activities, lets them manipulate the view 
    public static SomeActivityGroup group; 

    // Need to keep track of the history if you want the back-button to work 
    // properly, don't use this if your activities requires a lot of memory. 
    private ArrayList<View> history; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    } 

    @Override 
    protected void onResume() { 

     super.onResume(); 
     this.history = new ArrayList<View>(); 
     group = this; 

     // Start the root activity within the group and get its view 
     View view = getLocalActivityManager().startActivity("SomeActivity", new Intent(this, SomeActivity.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)).getDecorView(); 

     // Replace the view of this ActivityGroup 
     replaceView(view); 
    } 

    public void replaceView(View v) { 
     // Adds the old one to history 
     if (history.size() == 0) { 
      if (rootView != null) { 
       history.add(rootView); 
       rootView = null; 
      } 
     } 
     history.add(v); 
     // Changes this Groups View to the new View. 
     setContentView(v); 
    } 

    public void back() { 
     try { 
      if (history.size() > 0) { 
       history.remove(history.size() - 1); 
       setContentView(history.get(history.size() - 1)); 
      } else { 
       finish(); 
      } 
     } catch (Exception ex) { 
     } 
    } 

    @Override 
    public void onBackPressed() { 
     try { 
      SomeActivityGroup.group.back(); 
     } catch (Exception ex) { 

     } 
     return; 
    } 

} 

だけACTIVITYGROUPSはICSでは非推奨とされていることに注意してください。

+0

後でコードを投稿してください – Kiotto

+0

OK、ActivityGroupのコードを追加しました。 ICS用に開発したい場合は、フラグメントとアクションバーのタブを使用することをお勧めします。 – Dante

1

新しいアプリケーションを開発する場合、TabHostとTabActivitiesでの「古い」アプローチが廃止されたため、フラグメントと互換性ライブラリを使用することを強く推奨します。ActionBarSherlockが好ましいです。

ライブラリをダウンロードして、クラスを見てみましょう:

デモ\

ABSLibraryXX \サンプル\ SRC \ COM \ actionbarsherlockサンプル\デモ\ \アプリ\ FragmentTabs.java私はあなたがどのように驚かれることでしょう保証

パワフルでシンプルです。 「アクティビティ」ではなく「フラグメント」を切り替えると、「フラグメント」状態は維持されます。つまり、アクティビティではなくビューのように動作します。

関連する問題