本文介绍了TabGroupActivity - startChildActivity - 不工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直使用 TabActivity 和我想要的标签上显示每个孩子的活动。我有流量这样的 MainActivity(TabActivity) - > TabGroupActivity1(TabGroupActivity) - > 活性1 - > 活性2

I have been using TabActivity and I want the tab to display on every child activity. I have flow like this MainActivity(TabActivity) -> TabGroupActivity1(TabGroupActivity) -> Activity1 -> Activity2

现在我想在活性2重定向只有在标志为true。所以,我的code表示有点像波纹管。

Now i want to redirect on Activity2 only if the flag is true. so that my code for that is something like bellow.

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

现在code为 TabGroupActvity1

public class TabGroupActyvity1 extends TabGroupActivity {

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


}

现在活动1

@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);
            //...
        }
    }

这是不工作,

在同一code中的之一,在一些click事件波纹管的作品,但在我的情况下不能正常工作

the same code the one in bellow works in some click event but not working in my case

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

请给一些建议,如何做到这一点。
有我解释这个问题很好...我需要添加一些更多的细节?

please give some suggestion how to do this.have I explain the problem well... do I need to add some more details?

推荐答案

好吧,我发现了其他的选择。

Okay, I found other alternative.

而不是...
在孩子活动的检查标志和不同的页面重定向。

Instead of...checking flag in the child activity and redirecting on different page.

我检查的国旗在parnt活性筛选

I am checking the flag in the parnt activity Like this

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

LoginActivity 成功登录后我开始 ReportActivity 像波纹管

and from LoginActivity on Successful login i am Starting ReportActivity like bellow

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

我也处理回preSS作为我不想让用户再次回到登录页面上。我处理 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();
    }
}

这篇关于TabGroupActivity - startChildActivity - 不工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-02 12:25