【问题标题】:Access Arraylist that was created in one activity in another using Index使用索引访问在另一个活动中创建的 Arraylist
【发布时间】:2016-08-08 18:54:49
【问题描述】:

这可能吗?假设我创建了一个 ListView,其中包含一个数组列表,其中填充了一个活动中的对象。现在我单击列表视图中的一个项目并获取索引。单击该项目后,它会将我带到另一个活动以及索引号。(使用意图)。现在我的问题是我想使用索引号查看单击项目的信息,以访问在上一个活动中创建的数组列表。这可能吗?

更新了项目类别。不知道我应该如何修改为单例类

public class Item {

private String name;
private String category;
private int grade;

public void setName(String n){

    name = n;
}

public void setCategory(String c){

    category = c;
}
public void setGrade(int g){

    grade = g;
}
public String getName(){
    return name;
}
public String getCategory(){

    return category;

}
public int getGrade(){
    return grade;
}

@Override
public String toString(){

    return getName();
}


}

【问题讨论】:

    标签: android listview android-activity arraylist


    【解决方案1】:

    我可以想到三种不同的方法可以帮助您做到这一点:

    第一种方法

    您可以在 Intent 中传递要用作额外对象的对象。正如@androidLover 之前所说,这将要求对象是serializable。请参考他/她回复中的链接。

    第二种方法

    使用某种包含对象列表的单例类。 http://www.tutorialspoint.com/design_pattern/singleton_pattern.htm

    由于在 ListView 上单击事件后,您拥有所需对象的索引,因此您可以轻松地从 Singleton 类中获取该对象。

    第三种方法

    使用称为 EventBus 的东西。 http://square.github.io/otto/

    这会稍微增加应用程序的复杂性,因此使用这种方法有点矫枉过正。但它仍然是有效的。

    【讨论】:

    • 我喜欢使用 Singleton 类的想法。我想这就是我最想要的。我确实有一个项目类。我不知道这是否是我应该修改的
    • 你的单例类应该有一个项目列表。您不应修改 Item 类,而应创建一个新的分离类。它将类似于项目列表的容器。请参考以下要点以查看示例link
    【解决方案2】:

    您可以send objects from one activity to another,这样您就可以发送孔列表或只发送您想要的项目。

    【讨论】:

      【解决方案3】:

      使用 Intent,您可以将列表和位置传递给另一个活动:

      Intent intent = new Intent(MainActivity.this, NextActivity.class);
      intent.putExtra("KeyList", MyList);
      intent.putExtra("PositionKey", thePositionClicked);
      

      在 NextActiviy 中,只需要获取 List 和 Position:

      Intent intent = getIntent();
      ArrayList<String> reciveList = intent.getStringArrayListExtra("KeyList");
      String position = intent.getStringExtra("PositionKey");
      

      现在你只需要匹配reciveList中的位置。 您可以查看 Intent 文档了解更多详细信息:http://developer.android.com/reference/android/content/Intent.html

      【讨论】:

      • 只是一个简短的评论 - 如果您只想通过活动传递简单的对象(例如字符串、整数等),这很有用。它们是可序列化的。但是如果你想传递你自己的对象(比如 Person、Car 等),你必须让它们可序列化,否则它就行不通了。
      • 哦,是的。如果你传递一个对象,你必须在你的对象中实现 Serializable。因此,您将对象传递给另一个活动,您可以使用 intent.getSerializableExtra()
      【解决方案4】:

      您可以使用的第一种方法
      来自hereputParcelableArrayListExtra (String name, ArrayList&lt;? extends Parcelable&gt; value)。并传递您的 ArrayList 并使用您在第二个 Activity 中的 ListView 中的 OnItemClick 中传递的索引获取您的对象。

      您可以使用的第二种方法
      在您的OnItemClick listView 活动中获取索引和对象,然后使用 Gson 将该对象转换为 GsonObject 并使用putExtra 传递它,您会找到一个示例here .

      【讨论】:

        【解决方案5】:

        尝试使用Parcelable 通过意图传递选定的对象

        【讨论】:

        • 查看命名网络链接的语法。我知道这很令人困惑:)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-03-02
        • 1970-01-01
        • 2011-04-02
        • 2015-09-15
        • 2011-10-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多