0

私は使用しておりTabActivity、すべての子アクティビティにタブを表示したいと考えています。私はこのような流れを持っていますMainActivity(TabActivity)-> TabGroupActivity1(TabGroupActivity)-> Activity1->Activity2

フラグが true の場合にのみ、Activity2 にリダイレクトしたいと考えています。そのための私のコードは次のようなものです。

TabGroupActivity

    public class TabGroupActivity extends ActivityGroup {

    private ArrayList<String> mIdList;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);       
        if (mIdList == null) mIdList = new ArrayList<String>();
    }

    /**
     * This is called when a child activity of this one calls its finish method. 
     * This implementation calls {@link LocalActivityManager#destroyActivity} on the child activity
     * and starts the previous activity.
     * If the last child activity just called finish(),this activity (the parent),
     * calls finish to finish the entire group.
     */
  @Override
  public void finishFromChild(Activity child) {
      LocalActivityManager manager = getLocalActivityManager();
      int index = mIdList.size()-1;

      if (index < 1) {
          finish();
          return;
      }

      manager.destroyActivity(mIdList.get(index), true);
      mIdList.remove(index); index--;
      String lastId = mIdList.get(index);
      Intent lastIntent = manager.getActivity(lastId).getIntent();
      Window newWindow = manager.startActivity(lastId, lastIntent);
      setContentView(newWindow.getDecorView());
  }

  /**
   * Starts an Activity as a child Activity to this.
   * @param Id Unique identifier of the activity to be started.
   * @param intent The Intent describing the activity to be started.
   * @throws android.content.ActivityNotFoundException.
   */
  public void startChildActivity(String Id, Intent intent) {     
      Window window = getLocalActivityManager().startActivity(Id,intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));
      if (window != null) {
          mIdList.add(Id);
          setContentView(window.getDecorView()); 
      }    
  }

  /**
   * 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  () {
      int length = mIdList.size();
      if ( length > 1) {
          Activity current = getLocalActivityManager().getActivity(mIdList.get(length-1));
          current.finish();
      }  
  }
}

今のコードTabGroupActvity1

public class TabGroupActyvity1 extends TabGroupActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        startChildActivity("OptionsActivity", new Intent(this,Activity1.class));
    }


}

Activity1

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

        if(flag){
            TabGroupActivity parentActivity = (TabGroupActivity)getParent();
            Intent previewMessage = new Intent(parentActivity, Activity2.class);
            parentActivity.startChildActivity("Activity2", previewMessage);
        }else{
            setContentView(R.layout.row);
            //... 
        }
    }

これは機能していません。

以下の同じコードがいくつかのクリックイベントで機能しますが、私の場合は機能しません

TabGroupActivity parentActivity = (TabGroupActivity)getParent();
Intent previewMessage = new Intent(parentActivity, Activity2.class);
parentActivity.startChildActivity("Activity2", previewMessage);

これを行う方法を提案してください。問題をうまく説明できましたか...さらに詳細を追加する必要がありますか?

4

1 に答える 1

4

さて、私は他の選択肢を見つけました。

代わりに...子アクティビティのフラグをチェックして、別のページにリダイレクトします。

親アクティビティでフラグを確認しています このように

if (getLNApplication().isLogin()) {
    startChildActivity("Report", new Intent(this, ReportActivity.class));
}else{
    startChildActivity("LogIn", new Intent(this, LoginActivity.class));
}

そして、LoginActivityログインに成功してから、ReportActivity次のように開始しています

parentActivity.startChildActivity("EditActivity", new Intent(getParent(), ReportActivity.class));

また、ユーザーがログインページに戻ってほしくないので、バックプレスも処理します。バックキーインを処理しますTabGroupActivity

このような

@Override
public void onBackPressed() {
    int length = mIdList.size();
    if (length > 1) {
        Activity current = getLocalActivityManager().getActivity(
                mIdList.get(length - 1));
        // Added code to disable back press only for the ReportActivity
        if(current instanceof ReportActivity){
            Log.i("TabGroup", "I am instance of ReportActivity" );
            return;
        }
        current.finish();
    }
}
于 2012-02-01T05:32:45.487 に答える