2011-07-13 15 views
2

私はタブのホストを作り、その中に4つのタブを示す、コードの下のプロフィールにTabHost内の別のアクティビティ?

/** Called when the activity is first created. */ 
     @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

    setContentView(R.layout.main); 
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

    TabHost tabHost = getTabHost(); 

    tabHost.addTab(tabHost.newTabSpec("list").setIndicator("List").setContent(
      new Intent(this, List.class))); 
    tabHost.addTab(tabHost.newTabSpec("profile").setIndicator("Profile").setContent(
      new Intent(this, Profile.class))); 
    tabHost.addTab(tabHost.newTabSpec("criteria").setIndicator("Criteria").setContent(
      new Intent(this, Criteria.class))); 
    tabHost.addTab(tabHost.newTabSpec("more").setIndicator("More").setContent(
      new Intent(this, More.class))); 
    } 
} 

であるように私がボタンをクリックすると、私は、ユーザーのプロファイルを編集するためのボタンがあり、それがメソッドを呼び出していますある

@Override 
public void onClick(View v) { 
System.out.println("Veer"); 
    Intent intent = new Intent().setClass(this, EditProfile.class); 
Intent intent = new Intent(this, EditProfile.class); 
} 

がEditProfileを示しているが、タブはiPhoneのように表示されていない以下のようにそれが、今私は私のタブが上記であるべきとEditProfileは、[プロファイル]タブ内にあることが何をすべきすべての時間表示されていますか?

答えて

1

extends ActivityGroup
あなたProfile活動は、タブでの活動は、次のように切り替えることができonClick(View v)

View view = getLocalActivityManager().startActivity("EditProfile", 
     new Intent(v.getContext(),EditProfile.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)) 
     .getDecorView(); 
setContentView(view); 
1

に次のコードを追加します。

まず、私たちは流れを理解してみましょう:

  1. 私たちは、タブのホストに持って、我々は次のアクティビティに移動する必要があり、そこから活性(たとえばリスト)(クリック項目の詳細を言う)の下で同じタブ。このため、アクティビティを置き換えるというコンセプトを使用することもできます。選択したタブのフラグを設定し、詳細が表示されていることを知るためのフラグを設定します。

  2. 前のアクティビティを同じタブで取得する必要があります。このために、アクティビティをもう一度置き換えるのではなく、選択されたタブに特定のフラグを使用しながら、タブを更新することができます。ショーの詳細については、フラグが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. 押し戻さは、私たちが

    @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(); 
        } 
    } 
    

詳細画面から再びリストに移動するには、タブの下での活動のそれぞれにBackPressedに上書き行われた場合、ここで最も重要な部分は 定数であります.LIST_ACTIVITY = 1;対応するアクティビティの値は0,1,2 ...となります。

また、タブのアクティビティをリフレッシュするときに正しいリスト(Activty)をロードするには、これをインクルードする必要がありますTabWidgetのonCreateタブの作成後に作成

tabHost.setCurrentTab(Constants.LIST_ACTIVITY); 
関連する問題