2012-06-14 37 views
0

我有一個對話框的首選項,我想打開另一個活動的按鈕。完成該活動後,我希望對話框使用從活動收集的信息更新文本視圖(在對話框中)。從dialogpreference(非活動)的startactivityforresult

換句話說: 偏好屏幕 - >對話偏好 - >對話框 - >按鈕單擊事件 - >活動

我曾經有一個正常的活動調用活動(活動 - >按鈕點擊 - >活動),所以我可以使用startactivityforresult,然後從「onactivityresult」調用我的syncgui函數。可悲的是,Dialog首選項不是活動,因此只能使用startactivity(來自上下文),而不能使用startactivityforresult(來自活動)。

是否有任何其他方式可以告訴我的對話框它開始的活動已完成並且它可以更新textview?這裏是原來的功能

舊父活動:

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

回答

0

您是否嘗試過使用:

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的UI線程上運行。

+0

對話不是一個活動,所以我也不能使用runOnUiThread。同樣的原因,我不能使用startactivityforresult。 –

+0

如果您的對話框是在您的活動中創建的,您應該可以使用它。但是既然你說你不行,這聽起來像是你在爲對話使用一個單獨的類,在這種情況下,你應該在構造你的對話類時將你的Activity作爲變量傳遞給你的對話類,並通過這個IE調用runOnUiThread。 mActivity.runOnUiThread – Guardanis

+1

該對話框是一個對話框首選項,所以我不能更改構造函數。無論如何,我最終在對話首選項中創建了一個函數,我從首選項屏幕調用該對話框來傳遞活動供我使用。這不是一個非常好的解決方法,但它可以完成工作。我想你的答案是正確的,因爲我猜測它會適用於其他人。 –

相關問題