Android系统.如何更改选项卡中的活动

Tim*_*ima 19 android tabactivity android-tabhost

以下情况:我有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);
    }

}
Run Code Online (Sandbox Code Playgroud)

活动'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));            
    }        
}
Run Code Online (Sandbox Code Playgroud)

Vic*_*dia 24

可以按以下方式切换选项卡中的活动.

首先让我们了解一下流程:

  1. 我们在Tab主机中有一个活动(比如一个列表),我们需要在同一个标​​签下转到下一个Activity(说明被点击项目的详细信息).为此,我们可以使用替换活动的概念.还可以设置所选选项卡的标志以及其他用于了解现在正在显示详细信息的标记

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

}
Run Code Online (Sandbox Code Playgroud)
  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();
      }
     }
    
    Run Code Online (Sandbox Code Playgroud)

这里最重要的部分是Constants.LIST_ACTIVITY = 1; 它表示我们所处的选项卡.因此相应的活动的值将为0,1,2 ...等

再次在刷新选项卡活动时加载正确的列表(Activty),我们必须在创建选项卡后将其包含在TabWidget onCreate中

tabHost.setCurrentTab(Constants.LIST_ACTIVITY);
Run Code Online (Sandbox Code Playgroud)

  • +1,只是一个通知 - 上面的'上下文'指的是包含的活动,而不是容器(TabActivity).哦,我确实想知道为什么不遵循Android意图设计并使用Constants.LIST_ACTIVITY代替.. (2认同)

suc*_*nil -2

处理按钮的onClick事件

finish() 活动添加 startActivity 方法来启动另一个活动。

谢谢