Android 适配器应该是局部变量还是实例变量?

Android 适配器应该是局部变量还是实例变量?,android,adapter,Android,Adapter,为listView设置适配器时,我是否应该只执行listView.setAdapter(new MyAdapater())还是我应该将适配器作为实例变量保留,并在onDestory()时将其设置为null?最好将适配器作为实例变量保留,因为每次都必须创建新适配器,而不是更改数据,并且可以调用notifyDatasetChanged()因此适配器将被刷新。答案取决于用例 如果您要执行数据操作,例如重新排列元素顺序或以某种方式动态更改数据,那么“更好”的做法是使用适配器的实例变量。无论何时访问适配器

为listView设置适配器时,我是否应该只执行
listView.setAdapter(new MyAdapater())
还是我应该将适配器作为实例变量保留,并在onDestory()时将其设置为null?

最好将适配器作为实例变量保留,因为每次都必须创建新适配器,而不是更改数据,并且可以调用notifyDatasetChanged()因此适配器将被刷新。

答案取决于用例

  • 如果您要执行数据操作,例如重新排列元素顺序或以某种方式动态更改数据,那么“更好”的做法是使用适配器的实例变量。无论何时访问适配器,都可以避免从ListView getAdapter()方法强制转换适配器

  • 如果您正在创建一个由例如10个字符串组成的简单列表视图,并且您不打算对数据集进行任何操作,那么您不需要保留对适配器的引用


  • 这不是真的。若您将适配器初始化为匿名实例,那个么若您需要更新数据集,则无需每次都创建它的新实例。在这种情况下,您可以简单地将附加的适配器转换为ListView,但这种“转换”需要成本和时间(我在下面的回答中提到了这一点)。如果您想在其他活动中使用相同的适配器,那么?@Chandrakanth,那又怎样?如果要在另一个有问题的活动中使用同一适配器,则匿名内部也是实例对象。若你们想再次使用相同的适配器,你们会怎么做?它可能是片段或活动示例联系人应用程序将有两个相同适配器的列表(联系人和FAVRT)