我有一个TabActivity
,第一个选项卡是ActivityGroup
,我使用下面的代码;
public class MyTabActivity extends TabActivity
{
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TabHost tabHost = getTabHost();
TabHost.TabSpec tabSpec;
Intent intent;
Resources resources = getResources();
intent = new Intent(MyTabActivity.this, MyActivityGroup.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
tabSpec = tabHost.newTabSpec("tab1");
tabSpec.setIndicator("Tab1", resources.getDrawable(R.drawable.ic_launcher));
tabSpec.setContent(intent);
tabHost.addTab(tabSpec);
intent = new Intent(MyTabActivity.this, SecondTab.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
tabSpec = tabHost.newTabSpec("tab2");
tabSpec.setIndicator("Tab2", resources.getDrawable(R.drawable.ic_launcher));
tabSpec.setContent(intent);
tabHost.addTab(tabSpec);
tabHost.setCurrentTab(0);
}
}
在我的ActivityGroup
中,我想在单击button
之后再转到另一个Activity
,因此我使用以下代码:
public class MyActivityGroup extends ActivityGroup
{
private Button button;
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_group);
button = (Button) findViewById(R.id.button);
button.setOnClickListener(new OnClickListener()
{
public void onClick(View v)
{
// TODO Auto-generated method stub
Intent intent = new Intent(MyActivityGroup.this, FirstActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
View view = getLocalActivityManager().startActivity("firstActivity", intent).getDecorView();
setContentView(view);
}
});
}
}
它有效,但有一个问题,当我在FirstActivity
中单击第一个选项卡时,我无法转到MyActivityGroup
。但例如,在单击SecondTab
之后,如果我单击第一个选项卡,我可以转到MyActivityGroup
。
为了解决这个问题,我认为我应该更改Intent标志,但我无法管理它。请帮助我。
你能给我看更多吗?我是这样实现的:
Intent i = new Intent(getParent(), SomeClass.class);
View view = SomeActivityGroup.group.getLocalActivityManager()
.startActivity("SomeClass", i
.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))
.getDecorView();
// Again, replace the view
SomeActivityGroup.group.replaceView(view);
您是否也想查看活动组本身?
好的,在这里:
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, RootActivity.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) {
if (history.size() == 1) {
rootView = history.get(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;
}
}
如果这是第一个选项卡,则应在中设置
public class Tabhost extends TabActivity {
getTabWidget().getChildAt(0).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (tabHost.getCurrentTab() == 0) {
// tabHost.setCurrentTab(1); // UGLY!!
// tabHost.setCurrentTab(0); // Had this before, but replaced it with :
SomeActivityGroup.group.onResume();
} else {
tabHost.setCurrentTab(0);
}
}
}