19

次の状況: TabActivity には、たとえば TabA、TabB、TabC の 3 つのタブがあります。

TabCのアクティビティ(Act_C_1)にボタンがあります。したがって、ユーザーがそのボタンをクリックすると、TabC で別のアクティビティ (Act_C_2) が発生するはずです。

提案/またはアイデアを事前に感謝します。

ムール

更新:

これが私のコードです

3 つのアクティビティを持つ TabActivity:

public class TabScreen extends TabActivity
{
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.tab_menu);

        TabHost tabHost = getTabHost();  // The activity TabHost
        TabHost.TabSpec spec;  // Resusable TabSpec for each tab
        Intent intent;  // Reusable Intent for each tab

        intent = new Intent().setClass(this, SecondActivity.class);

        // Initialize a TabSpec for each tab and add it to the TabHost
        spec = tabHost.newTabSpec("tab_1").setIndicator("Tab1",null).setContent(intent);
        tabHost.addTab(spec);

        intent = new Intent().setClass(this, ThirdActivity.class);
        // Initialize a TabSpec for each tab and add it to the TabHost
        spec = tabHost.newTabSpec("tab_2").setIndicator("Tab2",null).setContent(intent);
        tabHost.addTab(spec);

        intent = new Intent().setClass(this, FourthActivity.class);
        spec = tabHost.newTabSpec("tab_3").setIndicator("Tab3",null).setContent(intent);
        tabHost.addTab(spec);
    }

}

アクティビティ 'Act_C_1' または FourthActivity.java:

public class FourthActivity extends Activity implements OnClickListener
{
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.fourth);

        Button BtnWeiter = (Button)findViewById(R.id.BtnWeiter);
        BtnWeiter.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) 
    {                    
        // I also tried to use LocalActivityManager
        // TabActivity parentTabActivity = (TabActivity) getParent();            
        // LocalActivityManager manager = parentTabActivity.getLocalActivityManager();
        // manager.destroyActivity("tab_3", true);
        // manager.startActivity("tab_3", new Intent(this, FourthActivity.class));
        finish();
        startActivity(new Intent(this, FourthActivity.class));            
    }        
}
4

4 に答える 4

24

タブ内のアクティビティは、次の方法で切り替えることができます。

まず、流れを理解しましょう。

  1. 同じタブの下の次のアクティビティ (クリックされたアイテムの詳細など) に移動する必要があるタブ ホスト アクティビティ (リストなど) があります。このために、アクティビティを置き換えるという概念を使用できます。また、選択したタブのフラグを設定し、詳細が現在表示されていることを知るためにその他のフラグを設定します

  2. 戻ると、同じタブの下にある前のアクティビティを取得する必要があります。このため、アクティビティを再度置き換える代わりに、選択されたタブの特定のフラグを使用してタブを更新できます。また、show details のフラグが true の場合は、同じタブのリストに移動します。それ以外の場合は、tabwidget の前にアクティビティに移動します (onBackPressed の通常の使用)。

コードは次のようになります。

  1. リストから詳細へ...

(これは onClickListener にある可能性があります)

private OnClickListener textListener = new OnClickListener() {

    @Override
    public void onClick(View v) {
        Constants.SHOW_DETAILS = true;
        Intent intent = new Intent(context, DetailsActivity.class);
        replaceContentView("activity3", intent);
        }
};

public void replaceContentView(String id, Intent newIntent) {
    View view = ((ActivityGroup) context)
            .getLocalActivityManager()
            .startActivity(id,
                    newIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))
            .getDecorView();
    ((Activity) context).setContentView(view);

}
  1. バック プレスが完了すると、タブの下の各アクティビティで BackPressed をオーバーライドして、詳細画面から再びリストに移動します。

    @Override
      public void onBackPressed() {
    // TODO Auto-generated method stub
    super.onBackPressed();
    if (MathHelper.SHOW_DETAILS) {
        Log.e("back", "pressed accepted");
        Constants.LIST_ACTIVITY = 1;
        Constants.SHOW_DETAILS = false;
        Intent intent = new Intent(this, Tab_widget.class);
        startActivity(intent);
        finish();
      }
     }
    

ここで最も重要な部分は、Constants.LIST_ACTIVITY = 1; です。どのタブにいるかを示します。したがって、対応するアクティビティの値は 0,1,2... などになります。

タブ アクティビティが更新されたときに正しいリスト (Activty) を再度読み込むには、タブの作成後にこれを TabWidget onCreate に含める必要があります。

tabHost.setCurrentTab(Constants.LIST_ACTIVITY);
于 2011-07-26T05:57:31.703 に答える
0

Intent.FLAG_ACTIVITY_CLEAR_TOPフラグを使用して、必要なタブのアクティビティを置き換えるだけです。

intent = new Intent().setClass(this, YourActivity.class);
spec   = tabHost.newTabSpec("tab1").setIndicator("Tab1",null)
        .setContent(intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));
tabHost.addTab(spec);
于 2015-04-23T14:53:04.397 に答える
-1

すべてのタブにこれを追加するだけです:

yourTabHost.getChildAt(0).setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
        getTabHost().setCurrentTab(0);
    }
});
于 2011-04-13T14:47:21.337 に答える
-2

ボタンの onClick イベントを処理する

finish() アクティビティ startActivity メソッドを追加して、別のアクティビティを開始します。

ありがとう

于 2010-10-06T12:30:11.573 に答える