1.首先,我在AndroidManifest.xml中为ActA这个Activity添加一个android:launchMode="singleTask"
2.我需要在ActA中弹出一个菜单,调用AlertDialog.Builder相关方法及对象
3.选择某个弹出菜单项,调用
Intent intent = new Intent();
intent.setClass(ActA.this, ***.class);
startActivityForResult(intent, 0);
4.每次调用startActivityForResult后都会自动调用onActivityResult方法,这个并非我想要的我移除android:launchMode="singleTask",然后发现调用startActivityForResult后不会再调用onActivityResult方法
对此我明白为什么,求解

解决方案 »

  1. Java代码public class ActA extends Activity{        @Override
    public void onCreate(Bundle savedInstanceState) {
            
            super.onCreate(savedInstanceState);
            setContentView(R.layout.t);
            
            Button t_button = (Button)findViewById(R.id.t_button);
            t_button.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
    final CharSequence[] items = {"从产品库选择", "制定产品名称", "从最近使用中选择"};

        AlertDialog.Builder builder = new AlertDialog.Builder(TestActivity.this);
        builder.setTitle("选择产品");
        builder.setPositiveButton("取消",new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
    dialog.cancel();
    }
    });
        builder.setItems(items, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int item) {
             dialog.cancel();
                switch(item){
             case 0:
            
             break;
             case 1:
             Intent intent = new Intent();
             intent.setClass(TestActivity.this, CreateProductActivity.class);
             TestActivity.this.startActivityForResult(intent, 0);
            
             //gotoAlterSelected(SUN_CREATE_PRODUCT,CreateProductActivity.class);
             break;
             case 2:break;
                }
            }
        }).show();
    }
    });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode,Intent intent){
    super.onActivityResult(requestCode, resultCode, intent);
    if (resultCode != RESULT_OK) return;
    }}配置文件代码<activity android:name=".ActA" android:launchMode="singleTask"  android:screenOrientation="portrait">
      

  2. 我试了一下,加不加android:launchMode="singleTask"都没有你所说的问题。你可以看看这两个地方的代码是不是有什么问题。
    CreateProductActivity
    //gotoAlterSelected(SUN_CREATE_PRODUCT,CreateProductActivity.class);
      

  3. 每次调用startActivityForResult后都会自动调用onActivityResult方法
    这个和android:launchMode="singleTask"没关系吧
      

  4. 因为不清楚你的CreateProductActivity是怎么写的,不过我在CreateProductActivity按home键,然后再长按home键进入ActA 加了 android:launchMode="singleTask" 的就会出现你所说的问题。因为singleTask的关系,这个时候CreateProductActivity被Destroy了。
      


  5. 不是每次调用startActivityForResult就会自动调用onActivityResult的,是在被调用的activity end时或是直接发setResult才会调用onActivityResult。你可以自己调试看看。
      

  6. 嗯,明白了。
    拷贝的楼主的原话,太大意了。像你说的,只有被调用的activity结束时或者设置setResult时才会调用onActivityResult方法
      

  7. 哦 我发现问题了,是目标activity加了android:launchMode="singleTask"
      

类似问题 »