1

我有两个活动,我想从第一个的上下文菜单中调用第二个。这是它应该做的。

  • 活动 A 上下文菜单单击应启动活动 B。

  • 在Activity B的onCreate中,根据传入的extras,自动显示一个AlertBuilder对话框,然后要么拍照,要么选择图片。

发生的情况是,当单击 Activity A 的上下文菜单项时,它会启动 Activity B 并显示 AlertDialog。如果我选择拍照选项,MediaStore.ACTION_IMAGE_CAPTURE Intent 将启动,一旦拍照,Activity B 将再次重新启动并显示 AlertDialog。

活动 A - 上下文菜单

    @Override
    public boolean onContextItemSelected(MenuItem item) {
        AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
        final ItemClass selItem = (ItemClass)this.getListView().getItemAtPosition(info.position);    
        Intent intent;
        SyncData sync;

        switch (item.getItemId()) {
            case R.id.start_activity_b:
            Intent intent = new Intent(ActivityA.this, ActivityB.class);
            intent.putExtra("data1", selItem.itemID);
            intent.putExtra("data2", "AUTO");
            Measurements.this.startActivityForResult(intent, REQUESTCODE_ACTIVITYB);


            return true;
                default:
                    return super.onContextItemSelected(item);
        }
    }

活动 B - onCreate 代码

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.listview_main);

        Bundle extras = getIntent().getExtras();
        if ((extras != null) && (extras.containsKey("data1"))) {
            this.itemID = extras.getString("data1");
        }
        if  ((extras != null) && (extra.containsKey("data2"))) {
            this.createAlertDialog();
        }
    } 
4

2 回答 2

1

正如我在评论中所说,你不应该需要,runOnUiThread()因为你已经在UI Thread. 有几种方法可能比这样做更好。同样,正如我在评论中所说,您应该能够在 Dialog 关闭时调用 setResult 并完成 ActivityB ,因为您正在使用startActivityForResult()to start ActivityB

就我所见,应该没问题。但是,如果它由于你的任何东西或其他东西而导致问题Dialog,你可以让你DialogActivity and give it a对话框主题by adjusting your清单`。利用

<activity android:name=".ActivityName"           
    android:theme="@android:style/Theme.Dialog"> // add this line to give it the effect of a dialog
</activity>

您可以Activity使用startActivityForResult(). 然后,当该结果返回给您时,ActivityB您可以完成并返回ActivityA或您需要做的任何事情。

希望这有帮助。

于 2013-06-04T15:46:29.757 回答
0

在反复尝试了解原因之后,我找到了解决方案。所需要做的就是在上下文菜单中创建一个可运行对象,因为它似乎需要快速返回,否则它会重新创建 Activity。我可能是错的,请随时纠正我。

活动 A - 上下文菜单

    @Override
    public boolean onContextItemSelected(MenuItem item) {
        AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
        final ItemClass selItem = (ItemClass)this.getListView().getItemAtPosition(info.position);    
        Intent intent;
        SyncData sync;

        switch (item.getItemId()) {
            case R.id.start_activity_b:
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Intent intent = new Intent(ActivityA.this, ActivityB.class);
                        intent.putExtra("data1", selItem.itemID);
                        intent.putExtra("data2", "AUTO");
                        Measurements.this.startActivityForResult(intent, REQUESTCODE_ACTIVITYB);
                    }
                });

                return true;
            default:
                return super.onContextItemSelected(item);
        }
    }
于 2013-06-04T14:05:09.783 回答