管理View
在Android中重复使用的源代码在哪里?我可以想到这个过程的三个不同部分,但可能还有更多:
View
是否符合重复使用条件的逻辑View
池的代码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 :(得分:3)
回收视图由AbsListView
及其子类ListView
和GridView
执行。您可以在此处找到这些类的源代码:https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/widget
从ListView
和AbsListView
开始。
答案 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是旧视图 适配器可能会使用它来避免不必要地分配视图。