2012-04-24 108 views
0

你能幫助我,如果有什麼辦法,如何從類的方法startActivityForResult(..)擴展ArrayAdapter?android - 從ArrayAdapter的startActivityForResult

謝謝。

編輯:

有MyAdapter類代碼:ARRAYADAPTER添加代碼

public class MyAdapter extends ArrayAdapter {

public static final String bundle_text = "some_text"; 

public MyAdapter(Context context, int textViewResourceId, List<MyAdapterItem> data) { 
    super(context, textViewResourceId, data); 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View row = convertView; 

    // ... 

    row.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View v) { 
      Intent intent = new Intent(getContext(), MyNewActivity.class); 
      intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

      int id = 1; 

      Bundle bundle = new Bundle(); 
      bundle.putLong(MyAdapter.bundle_text, id); 

      intent.putExtras(bundle); 
      getContext().startActivity(intent); 
     } 
    }); 

    return super.getView(position, convertView, parent); 
} 

}

所有作品,而是從一個ArrayAdapter類無法調用startActivityForResult,我只能撥打startActivty 。 但MyNewActivity完成後,我想刷新列表視圖,但我不知道如何,當我無法調用startActivityForResult。

+0

你可以粘貼一些你的addapter代碼? – 2012-04-24 16:55:39

+0

startActivityForResult是Activity的一種方法。您需要在Activity子類的範圍或Activity子類的子類中調用它。你想做什麼? – 2012-04-24 17:21:52

+0

我想在listview中顯示相同的數據。點擊一行後 - 開始新的活動 - 直到這一點,這是確定的。然後(新活動關閉後)我想刷新列表視圖)。但有問題,我不知道,什麼時候以及如何刷新listview adter關閉了新的活動。 – Dan 2012-04-24 17:27:50

回答

1

這是一個普遍的誤解(因爲是舊線,我只是它的輪廓)

  1. 適配器僅用於數據列表視圖 - 它返回一個視圖中的getView爲一排,但並不真正處理任何GUI事件 - 這些都是在活動中完成的。事實上,如果適配器正在從互聯網或數據庫加載很多行,它應該在UI線程之外完成。

  2. 活動適用於活動。您在活動中將單擊監聽器附加到列表視圖中。那麼打電話是沒有問題的。一個細節編輯活動 - 它全部在UI線程上。所以沒有問題從UI線程開始一個活動。

  3. 更新適配器的問題!如果您返回詳細信息活動,則會發現該列表未更新,因爲適配器未更新。要做到這一點,請開始詳細的結果活動。不要在任何適配器的東西中混淆細節「形式」。實際上,您可以選擇返回在詳細記錄中創建或編輯的POJO,並且根本不打擾數據庫。

  4. 現在,在您的活動中,您將偵聽onActivityResult()並執行插入到適配器(和數據庫後端,如果您有例如SQLite在應用程序中),然後通知數據已更改爲列表視圖。它會自動更新列表視圖。

性能可能是一個問題,如果listview重新加載。在大多數情況下,您可以通過添加到適配器來獲得,並簡單地通知列表視圖數據已更改。由於數據顯示爲「增量」,因此您可能已編輯顯示的第1 - 5行的第3行。然後列表視圖將只刷新這些1-5行顯示位置。但是,如果你重新加載說500行時,只有1改變你可能會得到性能問題:)

+0

這是一個很好的解釋,但是如果我膨脹ListAdapter的視圖並完成所有需要的工作,但是在活動中附加監聽器,那麼它會崩潰,因爲onCreate()可能沒有看到ListAdapter getView()函數的結果。我應該怎麼做,因爲在getView()中附加一個監聽器來激活另一個活動的結果根本不起作用:( – soshial 2016-01-13 23:45:41

相關問題