使用适配器用于非列表视图

时间:2011-01-28 17:41:41

标签: android

我正在使用SimpleCursorAdapter用我的数据库中的项填充ListView。当用户单击某个项目时,它会将其带到该项目的详细活动。显示该页面的最佳做法是什么;只需编写一个显示函数来抓取我想要设置文本的所有TextView并从数据库中填充它们或使用另一个SimpleCursorAdapter来设置TextViews?如果答案是使用适配器,我是否必须在ListView中推送详细信息页面?

3 个答案:

答案 0 :(得分:4)

我认为最好的方法是在列表活动中提取一些id,并将该id(在intent中)传递给detail Activity。

如果数据不是那么多,你可以在意图的附加内容中发送所有内容。问题在于意图并非旨在将复杂数据(无论是大量数据)从一个活动发送到另一个活动。

在详细活动中,您应该从数据库中获取数据(例如:select * from people where id = 123)。现在,您可以将该表的列映射到一个简单的对象。

例如:

public class Person {
    String name;
    Integer age;
    String address;
}

作为最后一步,要向用户显示数据,请从布局中获取一些文本视图,并使用您从数据库中获得的值设置文本。

TextView ageTv = (TextView)findViewById(R.id.age);
ageTv.setText(person.age + " years old");
//etc

无需在详细活动中使用ListView

答案 1 :(得分:1)

杰森

在这种情况下,您无需使用适配器,它比必要的更复杂,更耗费资源。 ListViews带来了很多副作用,包括但不限于:

  • 滚动和触摸事件的监听器
  • 许多小视图对象,占用可用内存
  • 如果您没有回收这些行,则会从磁盘读取并重复充气
  • 在绘制视图层次结构并估计列表视图的大小时,多次重复调用子项的onMeasure()

基本上,你不恰当地使用ListViewAdapter范例浪费了内存和cpu时间。您所需要的只是Cursor用于显示数据,TextViews用于显示数据,ScrollView和(LinearLayout || RelativeLayout)来保存{{1}如果它们太大而无法立即适合屏幕,则会滚动。

答案 2 :(得分:0)

这样做的几种方法:

  • 只需将项目监听器附加到ListView和内部,调用新的意图,并传递一些数据(最好是少量数据)。
  • 或者您可以在详细活动列表视图中创建另一个适配器,该适配器也将使用简单的游标适配器从您的sqlite数据库中提取详细信息。 (更多数据)

这实际上取决于你试图解决的问题。是不是SimpleCursorAdapter与数组逻辑相比,是一个整齐的解决方案,所有这些设置,获取东西?