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.