【问题标题】:Select object from listview从列表视图中选择对象
【发布时间】:2012-03-30 13:58:09
【问题描述】:

我在一个项目中有一个活动,其中包含 X 类型的对象列表。这些对象显示在其名称的列表视图中。当我单击列表中的一个项目时,我想继续选择对象并显示其详细信息。现在,通过活动在 Android 中传递参数似乎并不那么方便......那么在 android 中做这种事情的通常方法是什么?目前我看到这个选项: 我开始一个新的活动并通过捆绑传递 ID。然后再次从数据库中获取对象。

【问题讨论】:

  • 当然,这是一种方法。

标签: android android-listview android-activity


【解决方案1】:

我这样做的方法是将 JSON 序列化的对象放入 Bundle (putString) 并将其传递给我用来启动 ActivityIntent,这将详细显示单个项目查看。

编辑:JSON 字符串存储在 savedInstanceState 中是一件非常方便的事情,这使得它成为 IMO 更具吸引力的解决方案

【讨论】:

  • 但这正是我不想做的。因为这似乎是不好的编程习惯,并且似乎会减慢应用程序的速度。对象也不能总是可序列化的,不是吗?如果有一天我决定在我的对象中包含一些不可序列化的东西怎么办?
  • 我说的是 JSON 序列化,我认为我已将其编辑到答案中......但我宁愿这样做,也不愿重新查询数据库。此外,它是一个非常方便的字符串,可以存储在 savedInstanceState 中。
【解决方案2】:

如果你想在一个新的activity上显示选中的item详情,你应该在主activity中使用一个Intent,例如:

Intent intentNew = new Intent(<YourActivity>.this, <NewActivity>.class);
        intentNew.putExtra("ItemDetails", vector);  //put an array or whatever you want, filled with item details
        startActivityForResult(intentNew,1);

在NewActivity中,你应该这样做:

 double[] vector= (double[]) getIntent().getSerializableExtra("ItemDetails");

【讨论】:

    【解决方案3】:

    有几种方法:

    1. 让您的对象实现 Serializable 并通过 Intent 共享它
    2. 传递 ID 并检索它
    3. 使用带有静态字段的单例类在类之间共享
    4. 使用 GlobalState(没有这方面的经验,但我知道这是可能的)
    5. 使用 SharedPreferences(虽然这接近使用 db)

    【讨论】:

    • 此列表中的#3 是我所练习和推荐的。实际上我使用 JSON 来进行序列化而不是实现 Serializable
    • 第二个。我应该按照最建议的方式订购它们:p /meh
    • 我知道..我只是有点懒xD
    • 更新:编辑为我认为最推荐的做法:)
    猜你喜欢
    • 2019-09-17
    • 1970-01-01
    • 1970-01-01
    • 2012-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-19
    • 1970-01-01
    相关资源
    最近更新 更多