web-dev-qa-db-ja.com

アンドロイド。タブ内のアクティビティを変更する方法

次の状況:私はTabActivityを持っています。 3つのタブ、TabA、TabB、TabC。

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

提案やアイデアを事前に感謝します。

ムール

PD:

これが私のコードです

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));            
    }        
}
19
Tima

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

まず、フローを理解しましょう。

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

  2. 押すと、同じタブの下に前のアクティビティが表示されます。このため、アクティビティを再度置き換える代わりに、選択したタブの特定のフラグを使用しながらタブを更新できます。また、詳細の表示のフラグがtrueの場合は、同じタブのリストに移動します。そうでない場合は、タブウィジェットの前にアクティビティを移動します(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. バックプレスが完了すると、タブの下の各アクティビティでバックプレスをオーバーライドして、詳細画面からリストに再度移動します。

    @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 ...などになります。

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

tabHost.setCurrentTab(Constants.LIST_ACTIVITY);
24
Vicky Kapadia

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);
0
Dimon