管理View在Android中重复使用的代码在哪里?

时间:2011-01-30 15:40:26

标签: java android views android-ui

管理View在Android中重复使用的源代码在哪里?我可以想到这个过程的三个不同部分,但可能还有更多:

  1. 确定View是否符合重复使用条件的逻辑
  2. 管理可以重复使用的View池的代码
  3. 从池中删除可重复使用的View并重置其属性值以表示逻辑上不同的View
  4. 的代码

    编辑:博文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将不再指向用户单击以打开对话框的元素!

2 个答案:

答案 0 :(得分:3)

回收视图由AbsListView及其子类ListViewGridView执行。您可以在此处找到这些类的源代码:https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/widget

ListViewAbsListView开始。

答案 1 :(得分:1)

我认为您正在寻找的一个很好的例子是位于AbsListView.RecycleBin包中的widget内部类。
您可以在此处在线查看代码: https://android.googlesource.com/platform/frameworks/base/+/android-2.2_r1.1/core/java/android/widget/AbsListView.java#3888

以下是文档的摘录:

  

RecycleBin有助于跨布局重用视图。 RecycleBin有两个级别     存储:ActiveViews和ScrapViews。 ActiveViews是屏幕上的那些视图     开始布局。通过构建,它们显示当前信息。在......的最后     布局,ActiveViews中的所有视图都降级为ScrapViews。 ScrapViews是旧视图     适配器可能会使用它来避免不必要地分配视图。