【问题标题】:startactivityforresult from dialogpreference (non activity)startactivityforresult from dialogpreference(非活动)
【发布时间】:2012-06-14 16:53:36
【问题描述】:

我有一个对话框首选项,上面有一个按钮,我想打开另一个活动。该活动完成后,我希望对话框使用从活动中收集的信息更新文本视图(在对话框中)。

换句话说: 首选项屏幕 --> 对话框首选项 --> 对话框 --> 按钮单击事件 --> 活动

我曾经有一个正常的活动调用活动(活动-->按钮单击-->活动),所以我可以使用 startactivityforresult,然后从“onactivityresult”调用我的syncgui函数。遗憾的是,Dialog 首选项不是一个活动,因此只能使用 startactivity(来自上下文),而不是 startactivityforresult(来自活动)。

有没有其他方法可以告诉我的对话框它开始的活动已经完成并且它可以更新文本视图?以下是原始函数

旧的父活动:

public void onClick(View v) {
        if(v == mSimModeBrowse) {
            Intent i = new Intent("com.shared.FileChooser");
            i.putExtra("com.shared.FileChooser.EXTRA_PATH", vsbPath);
            i.putExtra("com.shared.FileChooser.EXTRA_EXTENSIONS", vsbExtensions);
            startActivityForResult(i,0);
        }
    }

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if(resultCode == RESULT_OK) {
            final String file = data.getExtras().getString("com.shared.FileChooser.EXTRA_RESULT");
            mSimModePath.setText(file);
        }
    }

来自文件选择器(子活动):

@Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
        File f = new File(path + "/" + files.get(position));
        Intent i = new Intent();
        i.putExtra(EXTRA_RESULT,f.getAbsolutePath());
        setResult(RESULT_OK,i);
        finish();
    }

【问题讨论】:

    标签: android android-preferences


    【解决方案1】:

    您是否尝试过使用:

    runOnUiThread(new Runnable() { 
        public void run() 
        { 
            Intent i = new Intent("com.shared.FileChooser");
            i.putExtra("com.shared.FileChooser.EXTRA_PATH", vsbPath);
            i.putExtra("com.shared.FileChooser.EXTRA_EXTENSIONS", vsbExtensions);
    
            startActivityForResult(i,0);
        } 
     }); 
    

    在 Dialog 的 onClick 事件中?这应该会导致它在 Activity 的 UI 线程上运行。

    【讨论】:

    • 对话框不是活动,所以我也不能使用 runOnUiThread。同样的原因我不能使用 startactivityforresult。
    • 如果您的对话框是在您的活动中创建的,您应该可以使用它。但是既然你说你不能,听起来你正在为你的对话框使用一个单独的类,在这种情况下,你应该在构造它时将你的 Activity 作为一个变量传递给你的对话框类,并通过它调用 runOnUiThread:IE。 mActivity.runOnUiThread
    • 对话框是一个对话框首选项,所以我不能更改构造函数。无论如何,我最终在对话框首选项中创建了一个函数,我从首选项屏幕调用该函数以传递活动以供我使用。这不是一个很好的解决方法,但它可以完成工作。我将您的答案标记为正确,因为我猜它对其他人有用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-30
    • 1970-01-01
    相关资源
    最近更新 更多