【问题标题】:Using adapters for non-list views为非列表视图使用适配器
【发布时间】:2011-02-01 14:34:53
【问题描述】:

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

【问题讨论】:

    标签: android


    【解决方案1】:

    我相信最好的方法是在列表活动中提取一些 id 并将该 id(在意图中)传递给详细 Activity。

    如果数据量不大,您可以发送 Intent 的附加内容中的所有内容。问题在于 Intent 并非旨在将复杂数据(也不是大量数据)从一个活动发送到另一个活动。

    在详细活动中,您应该从数据库中获取数据(例如: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

    【讨论】:

    • 好的,这就是我目前正在做的事情。我只是想知道这种风格是否在这种情况下使用适配器。
    • 只有在有要显示的项目列表时才使用适配器。我认为这是一种常见的做法
    【解决方案2】:

    杰森

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

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

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

    【讨论】:

      【解决方案3】:

      这样做的几种方法:

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

      这实际上取决于您要解决的问题。 SimpleCursorAdapter 到数组逻辑和从数组逻辑之间来回不是一个巧妙的解决方案吗?

      【讨论】:

      • SimpleCursorAdapter 是一个很好的解决方案,我只是想知道将不是列表的东西推入 ListViews 以使其工作是否很奇怪。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-15
      • 1970-01-01
      • 2011-07-16
      相关资源
      最近更新 更多