2011-01-30 40 views
3

管理View在Android中重複使用的源代碼在哪裏?我能想到的三個不同的部分,以該處理,但是可以存在更多:管理視圖在Android中重新使用的代碼在哪裏?

  1. 用於確定一個View獲再利用
  2. 管理的View s表示可以是池的代碼的邏輯重新使用
  3. 去除該代碼可重複使用的從池中View並復位其屬性值來表示一個邏輯上不同的View

編輯:博客文章Developing applications for Android – gotchas and quirks給出了下面的例子:

public class PencilWise extends ListActivity { 
    View activeElement; 
    // ... 
    @Override 
    public void onCreate (Bundle savedInstanceState) { 
     // ... 
     this.getListView().setOnItemClickListener (new OnItemClickListener () { 
      public void onItemClick (AdapterView<?> parent, View view, int position, long id) { 
       MyActivity.this.activeElement = view; 
       MyActivity.this.showDialog (DIALOG_ANSWER); 
      } 
     }); 
    } 
} 

showDialog方法將顯示對話框答案,需要知道問題的用戶已經打開。問題是,當對話框打開時,傳遞給onItemClick的視圖可能已被重用,因此activeElement將不再指向用戶單擊以首先打開對話框的元素!

+0

需要的地方查看重用Android通常有一些基礎設施來協助解決這個問題。一個示例是使用AdapterViews/Adapter(如帶有BaseAdapter的ListView)。除此之外,我不確定這裏真正要問什麼。 – 2011-01-31 03:08:49

回答

1

我認爲你要找的一個很好的例子是位於widget包中的AbsListView.RecycleBin內部類。
你可以看到代碼在這裏在線: https://android.googlesource.com/platform/frameworks/base/+/android-2.2_r1.1/core/java/android/widget/AbsListView.java#3888

下面是從文檔的摘錄:

的RECYCLEBIN利於整個佈局視圖重用。 RecycleBin有兩個級別的 存儲:ActiveViews和ScrapViews。 ActiveView是那些在屏幕上在 開始佈局的視圖。通過施工,他們正在顯示當前信息。在 佈局的末尾,ActiveView中的所有視圖都被降級爲ScrapViews。 ScrapViews是 可能被適配器用來避免不必要地分配視圖的舊視圖。

相關問題