19

以下情况:我有 TabActivity,例如三个选项卡,TabA、TabB、TabC。

TabC 的活动(Act_C_1)中有一个按钮。因此,如果用户单击该按钮,TabC 中应该会发生另一个活动 (Act_C_2)。

我提前感谢您的任何建议/想法。

穆尔

升级版:

这是我的代码

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. 我们在 Tab host 中有一个活动(比如一个列表),我们需要从中转到同一选项卡下的下一个活动(比如单击项目的详细信息)。为此,我们可以使用替换活动的概念。还为选定的选项卡设置标志,以及其他了解正在显示的详细信息

  2. 当我们按下返回时,我们应该在同一个选项卡下获得上一个活动。为此,我们可以在使用所选选项卡的特定标志时刷新选项卡,而不是再次替换活动。此外,如果显示详细信息的标志为真,我们将进入同一选项卡中的列表,否则我们将进入 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. 完成后按后,我们在选项卡下的每个 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);
于 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 回答