startactivityforresult из диалогового предпочтения (не активность)

У меня есть диалоговое окно с кнопкой, чтобы открыть другое действие. Когда это действие будет завершено, я хочу, чтобы диалоговое окно обновляло текстовое представление (в диалоговом окне) информацией, полученной из этого действия.

Другими словами: экран настроек -> настройки диалога -> диалог -> событие нажатия кнопки -> действие

Раньше у меня была обычная активность, вызывающая активность (Activity -> Button button -> Activity), чтобы я мог использовать startactivityforresult, а затем вызывать мою функцию syncgui из "onactivityresult". К сожалению, предпочтение Dialog не является действием, и поэтому может использовать только стартовую активность (из контекста), а не стартовую активность для результата (из активности).

Есть ли другой способ сообщить моему диалогу, что начатое действие выполнено и что он может обновить текстовое представление? Вот оригинальные функции

Старая родительская активность:

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

из filechooser (дочерняя деятельность):

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

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

внутри события onClick вашего диалога? Это должно заставить его работать в потоке пользовательского интерфейса Activity.

Другие вопросы по тегам