TabActivity组活动后退按钮不起作用

时间:2011-12-15 18:36:30

标签: android tabactivity android-tabactivity

我在tabactivity和grouptactivty中有后退按钮的问题。 我有4个标签,在一个标签中我也有3个以上的活动。当我打电话给一个活动时,它没有问题。但是如果我点击后退按钮,那么我的应用程序就会关闭。

这是我的代码。我的faullt在哪里。

Tabactivity

public class TabbarActivity extends TabActivity {

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.tabbar);



    TabHost tabHost = getTabHost();
    TabHost.TabSpec spec;
    Intent intent;
    Resources res = getResources();

    intent = new Intent().setClass(this, HauptmenuActivity.class);
    spec = tabHost.newTabSpec("ReweHaupt")
            .setIndicator("ReweHaupt", 
                    res.getDrawable(R.drawable.home))
            .setContent(intent);
    tabHost.addTab(spec);

    intent = new Intent().setClass(this, ContactGroupEinkaufliste.class);
    spec = tabHost
            .newTabSpec("EinkaufListe")
            .setIndicator("EinkaufListe",
                    res.getDrawable(R.drawable.einkaufliste))
            .setContent(intent);
    tabHost.addTab(spec);

    intent = new Intent().setClass(this, FilialesuchenActivity.class);
    spec = tabHost
            .newTabSpec("Filiarsuchen")
            .setIndicator("Filiarsuchen",
                    res.getDrawable(R.drawable.searchbuton))
            .setContent(intent);
    tabHost.addTab(spec);

    intent = new Intent().setClass(this, NotizblockActivity.class);
    spec = tabHost
            .newTabSpec("Einkaufzettel")
            .setIndicator("Einkaufzettel",
                    res.getDrawable(R.drawable.einkaufliste))
            .setContent(intent);
    tabHost.addTab(spec);

}

ContactGroupEinkaufliste.java

public class ContactGroupEinkaufliste extends ActivityGroup {

public static ContactGroupEinkaufliste groupContact;


private ArrayList<View> history;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    this.history = new ArrayList<View>();
    groupContact = this;


    View view = getLocalActivityManager().startActivity(
            "idHoraireActivity",
            new Intent(this, EinkauflisteActivity.class)
                    .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))
            .getDecorView();


    replaceView(view);

}

public void replaceView(View v) {

    history.add(v);

    setContentView(v);
}

public void back() {
    if(history.size() > 0) {
        history.remove(history.size()-1);
        setContentView(history.get(history.size()-1));
    }else {
        finish();
    }
}

// @Override
public void onBackPressed() {
    ContactGroupEinkaufliste.groupContact.back();
    return;
}}

EinkauflisteActivity.java

public class EinkauflisteActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.einkaufliste);

    Button btnsenden = (Button) findViewById(R.id.btnsenden);
    Button btnscaner = (Button) findViewById(R.id.btnscaner);
    Button btnsuchen = (Button) findViewById(R.id.btnsuchen);

    // wenn wir button clicken, rufen wir neu activity

    btnsuchen.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            View view = ContactGroupEinkaufliste.groupContact
                    .getLocalActivityManager()
                    .startActivity(
                            "suchenactivity",
                            new Intent(v.getContext(), SuchenActivity.class)
                                    .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))
                    .getDecorView();
            ContactGroupEinkaufliste.groupContact.replaceView(view);
        }
    });

}}

SuchenActivity.java

public class SuchenActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.suchen);

}}

谢谢

4 个答案:

答案 0 :(得分:0)

是的,您需要手动处理后退按键事件。这里描述了这种技术:

http://united-coders.com/nico-heid/use-android-activitygroup-within-tabhost-to-show-different-activity

答案 1 :(得分:0)

点击后退按钮时你会有什么期望?默认操作将转到上一个活动。您将TabActivity作为主要内容 - 因此您退出TabActivity。如果您想以某种方式更改默认操作,请在TabActivity中覆盖onBackPressed。但要小心 - 改变默认操作通常不利于用户体验。

答案 2 :(得分:0)

在TabActivity中试试这个..

@Override
public void onBackPressed()
{
    // TODO Auto-generated method stub
    Activity act = getCurrentActivity();
    act.onBackPressed();

    // super.onBackPressed();

}

答案 3 :(得分:0)

我发现在TabActivity中覆盖Back按钮操作是不可能的。 您应该在托管活动中执行此操作

@Override

         public void onBackPressed() {

             Log.i("Kishu","[onBackPressed()] pressed");
             getParent().moveTaskToBack(true); 
             return;

         }

在此示例中,按“返回”按钮将使您的应用程序返回。默认行为将关闭它。

注意:您应该放回TabActivity,而不是托管活动。