1

我正在实现一个带有 Tabhost 的应用程序。在我的一个选项卡中,我正在执行多个活动(ActivityGroup)。

例如:我在活动一中,单击列表视图后,我转到同一选项卡中的活动二。问题是当我按下后退按钮时,应用程序关闭,我想回到活动一。我已经覆盖了 onBackPressed() 方法和 onKeyDown 方法,它们不会被调用,也不会被解雇。我看过很多帖子都有同样的问题,但显示的任何解决方案都不起作用。

很高兴得到您的帮助!

创建选项卡:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main_tab);

    TabHost fichas = getTabHost();
    fichas.setup();     

    TabHost.TabSpec spec=fichas.newTabSpec("tab1");
    Intent i = new Intent(getApplicationContext(), AllProductsActivity.class);
    spec.setContent(i);
    spec.setIndicator("Hoy");
    fichas.addTab(spec);

    TabHost.TabSpec spec2=fichas.newTabSpec("tab2");
    Intent i2 = new Intent(getApplicationContext(), QueActivity.class);
    spec2.setContent(i2);
    spec2.setIndicator("Que");
    fichas.addTab(spec2);

    spec=fichas.newTabSpec("tab3");
    spec.setContent(R.id.Cuando);
    spec.setIndicator("Cuando");
    fichas.addTab(spec);

    spec=fichas.newTabSpec("tab4");
    spec.setContent(R.id.Donde);
    spec.setIndicator("Donde");
    fichas.addTab(spec);

}

在 QueActivity.class 我正在实现 onClickListener 以在同一选项卡中显示新活动:

public void onItemClick(AdapterView<?> a, View v, int position, long id) {
            //creo el nuevo objeto para poder llamarlo

            Intent intent = new Intent(QueActivity.this, ProductosCategorias.class);

            //Creo la informacion para pasar entre actividades
            Bundle informacion= new Bundle();
            intent.putExtra("eventos",categorias.get(position).getEventos());
            Toast.makeText(getApplicationContext(), "has seleccionado "+ categorias.get(position).getNombre(), Toast.LENGTH_SHORT).show();
            //New activity
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            View view = (getLocalActivityManager().startActivity("productos", intent)).getDecorView();
            setContentView(view);                                   
        }

请求的活动。这是我要覆盖 onBackPressed() 的地方

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_productos_categorias);
    //Do stuff here 
    });

在 onCreate 方法之外,我将覆盖:

public void onBackPressed(){
    System.out.println("Fires");
    //Go back to the other intent
}

问题是当我按下后退键时,我的重写方法没有被触发,因为应用程序被关闭了

4

3 回答 3

1

这是因为在ActivityGroup事件中onActivityResult调用你的ActivityGroup类而不是activity你调用它。

这个堆栈溢出问题可以解决您的问题:

选项卡活动中的 onActivityResult 问题

于 2013-07-31T06:30:38.017 回答
0

您托管 tabwidget 的主要活动正在获取 onBackPressed 调用,尝试使用回调接口或检查您当前的活动是否在按下后退按钮时处于前台。

于 2013-07-31T06:30:31.917 回答
0

首先,在您实现 onBackPressed 的地方,在您的 tabhost 活动(具有所有选项卡活动)或您的选项卡活动(QueActivity)中。

TabHost Activity (ActivityGroup) 不会在子选项卡活动上调用 onBackPressed。我认为必须手动完成。

TabHost 活动(活动组)

@Override
public void onBackPressed(){
    Activity currentActivity = getCurrentActivity();
    if(currentActivity != null)
        currentActivity.onBackPressed();
}

使用上面的代码,您的 QueActivity 应该会被调用 onBackPressed。

于 2013-07-31T06:47:39.773 回答