[英]Android. How to change Activity within a Tab
以下情況:我有TabActivity,例如三個選項卡,TabA,TabB,TabC。
TabC的活動(Act_C_1)中有一個按鈕。 因此,如果用戶單擊該按鈕,則TabC中應發生另一個活動(Act_C_2)。
我提前感謝您提出任何建議/想法。
穆爾
UPD:
這是我的代碼
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));
}
}
可以按以下方式切換選項卡中的活動。
首先讓我們了解一下流程:
我們在Tab主機中有一個活動(比如一個列表),我們需要在同一個標簽下轉到下一個Activity(說明被點擊項目的詳細信息)。 為此,我們可以使用替換活動的概念。還可以設置所選選項卡的標志以及其他用於了解現在正在顯示詳細信息的標記
當我們按下時,我們應該在相同的選項卡下獲取之前的活動。為此,我們可以在使用選中的選項卡的特定標志時刷新選項卡而不是再次替換活動。 此外,如果顯示詳細信息的標志為true,我們將在同一個選項卡中列出該列表,否則我們將在tabwidget之前進行活動(正常使用onBackPressed)
代碼可以如下..
(這可以在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);
}
當后退完成后,我們覆蓋選項卡下每個Activity中的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);
只需使用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);
只需為所有標簽添加:
yourTabHost.getChildAt(0).setOnClickListener(new OnClickListener() {
public void onClick(View v) {
getTabHost().setCurrentTab(0);
}
});
處理onClick事件按鈕
finish()活動添加startActivity方法以啟動另一個活動。
謝謝
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.