Android:使用来自另一个 Activity 的 Arraylist 填充 Table

Android: Populating a Table with an Arraylist from another Activity

我需要在这里指出正确的方向。

我有一个名字的 Arraylist(String) 和一个评级的 Arraylist(String)。我想在第 1 列中显示名称,在第 2 列中显示评分值,以便用户可以在下一个 [=26] 的 table 布局中看到名称以及他们在名称旁边给出的评分=].

arraylists存在于主activity中,需要传送到下一个activity,姑且称之为'Activity Two'。不确定如何使用 Arraylists 实现此目的。

所以,基本上。我需要知道..

如何创建一个 table 布局列,它将动态显示用户输入的数据,并从另一个 activity 中的 Arraylist 接收该数据。

非常感谢我的巫师们的任何建议。

一个建议是将数据简单地写入 SharedData。然后你可以随时从任何 activity 回调它。

我这样做是为了在一个视图中设置首选项,然后供小部件使用。相同的应用程序。不同的看法。相同的数据。

澄清一下: 我想我以前在说 SharedData 时使用了错误的术语。我真正应该说的是 "SharedPreferences".

它的工作方式是,在您 activity 的某个时刻,您将数据写出。您只需告诉它要将哪些值写入哪些键,就可以了。在后台,系统会存储您的应用程序独有的 XML 文件。一旦该文件存在,您应用中的任何其他 activity 都可以调用它来检索值。

完整的解释可以在这里找到: http://developer.android.com/guide/topics/data/data-storage.html

我将其用于实际主要 activity 是小部件的应用程序。该小部件的首选项是从 SharedPreferences 调用的。这些首选项最初是在正常的全屏 activity 中编写的。设置它们后,关闭 activity,下次小部件更新时,它会获取当前值。

如果您已经拥有 ArrayList 的信息并且只是调用一个新的 Intent 来打开您应该能够将此信息在 Bundle 中传递给新的 class。由于 ArrayList 实现了 Serializable,您可以将整个数组传递给捆绑包中的新意图,然后将其加载到您创建的新意图中。

    // Class that you have the ArrayList in MainActivity
    ArrayList<String> names = new ArrayList<>();
    names.add("NAME 1");
    names.add("NAME 2");

    ArrayList<String> ratings = new ArrayList<>();
    ratings.add("10");
    ratings.add("8");

    // Create the Bundle and add the ArrayLists as serializable
    Bundle bundle = new Bundle();
    bundle.putSerializable("NAMES", names);
    bundle.putSerializable("RATINGS", ratings);

    // Start new intent with ArrayList Bundle passed in
    Intent intent = new Intent(this, ActivityTwo.class);
    intent.putExtra("KEY", bundle);
    startActivity(intent);

现在您已经传入了 ArrayList,您需要在您调用的新 Intent 中提取该信息。这应该在 ActivityTwo

的 onCreate 中完成
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_phone_list_custom);

    // Get Extras that were passed in
    Bundle extras = getIntent().getExtras();

    // Not null then we can do stuff with it
    if (extras != null) {
        // Since we passed in a bundle need to get the bundle that we passed in with the key  "KEY"
        Bundle arrayListBundle = extras.getBundle("KEY");
        // and get whatever type user account id is

        // From our Bundle that was passed in can get the two arrays lists that we passed in - Make sure to case to ArrayList or won't work
        ArrayList<String> names = (ArrayList) arrayListBundle.getSerializable("NAMES");
        ArrayList<String> ratings = (ArrayList) arrayListBundle.getSerializable("RATINGS");

        // TODO Make this do more than just log
        Log.i(TAG, "Name=" + names.get(0) + " Rating=" + ratings.get(0));
        Log.i(TAG, "Name=" + names.get(1) + " Rating=" + ratings.get(1));

    }