Tab主机ActivityGroups在旋转android

时间:2012-02-24 10:06:54

标签: java android android-layout android-intent

我正在使用TabHost创建一个应用程序。我的活动是在处理这个课程的小组中:

package android.app.reader;

import java.util.ArrayList;

import android.app.ActivityGroup;
import android.content.Intent;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;


@SuppressWarnings("deprecation")
public class CustomActivityGroup extends ActivityGroup {

    protected ArrayList<View> viewList; // Need this to keep track of the stack.

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);       
        viewList = new ArrayList<View>();
    }

    public void replaceContentView(String id, Intent newIntent) {

        View view = getLocalActivityManager()
                        .startActivity(id, newIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)) 
                        .getDecorView();
        viewList.add(view); 
        this.setContentView(view);
    }


  /**
   * The primary purpose is to prevent systems before android.os.Build.VERSION_CODES.ECLAIR
   * from calling their default KeyEvent.KEYCODE_BACK during onKeyDown.
   */
  @Override
  public boolean onKeyDown(int keyCode, KeyEvent event) {
      if (keyCode == KeyEvent.KEYCODE_BACK) {
          //preventing default implementation previous to android.os.Build.VERSION_CODES.ECLAIR
          return true;
      }
      return super.onKeyDown(keyCode, event);
  }

  /**
   * Overrides the default implementation for KeyEvent.KEYCODE_BACK 
   * so that all systems call onBackPressed().
   */
  @Override
  public boolean onKeyUp(int keyCode, KeyEvent event) {
      if (keyCode == KeyEvent.KEYCODE_BACK) {
          onBackPressed();
          return true;
      }
      return super.onKeyUp(keyCode, event);
  }

  /**
   * If a Child Activity handles KeyEvent.KEYCODE_BACK.
   * Simply override and add this method.
   */
  @Override
  public void onBackPressed() {
      if(viewList.size() > 1) {  
          viewList.remove(viewList.size()-1);
          setContentView(viewList.get(viewList.size()-1));         
      }else {  
          finish();  
      }  
  }

  /**
   * This method finishes all views in the
   * stack except the initial Activity for the given
   * tab
   */
    public void backToTabInitActivity(){
        int length = viewList.size();
        // Need to remove the views in the viewList array
        for(int i = length; i > 1 ; i-- ){
            viewList.remove(viewList.size()-1);
        }

        setContentView(viewList.get(0));    
    }

}

当我需要更改活动时,我会这样做:

    Intent intent = new Intent(My_Window.this, My_Files.class);
CustomActivityGroup parentActivity = (CustomActivityGroup)getParent();
    parentActivity.replaceContentView("tab"+choosed, intent);

这很好用。但轮换存在问题。当我进入My_Files活动并轮播我的设备时,会打开My_Window活动。

我是开发Android的新手,很难按照代码来解决这个问题。也许有人有这个问题并解决了它?

我支持从API 7到API 13

此外,我还有动作栏sherlock - 我试图通过在上面创建自定义工具栏来使用它。

0 个答案:

没有答案