java - 在 Activity 之间共享 ArrayList 的良好编程实践

标签 java android android-activity arraylist android-adapter

我正在尝试创建一个 Android 应用程序来在主要 Activity 中显示一组事实,用户可以将事实添加到 Collection 夹的另一个 Activity 中。

我在类之间共享/访问 ArrayList 时遇到问题,因此我可以在 ArrayList 上调用更新方法(添加、删除等)。我也不确定解决此问题应遵循的最佳实践。

  1. 目前,我已在 MainActivity.java 中将 ArrayList 声明为 public static final,其中处理其更新,然后在 FavouriteActivity.java 中访问该 ArrayList 并分配给新的 ArrayList 集合,如以下所示代码如下。然而,据我所知,这不是良好的编程实践,因此我的问题发布在这里以供指导。

  2. 我认为我不能使用 Intent 来共享/访问它,因为 ArrayList 存储 not 的对象。我见过一个类似的问题推荐这个,但它对我不起作用。

  3. 我尝试在 MainActivity 中创建一个 FavouriteActivity 对象,从而从该类中的 ArrayList 上的 FavouriteActivity 调用 addFavourite() 等方法,但是遇到了一些错误。

  4. 我还尝试为 FavouriteActivity 设计一个构造函数,它在创建时接受 ArrayList,从而从 MainActivity 传递 ArrayList。这再次不起作用,遇到了几个问题。

另外,理想情况下应该在哪里对 Collection 夹列表进行所有这些处理?在 MainActivity、FavouriteActivity 或 FavouriteAdapter 中?

谢谢大家。

Favourite.java

这个类有两个字段,都是字符串来表示 ID 和一些文本。在构造函数中初始化,并有两个 get 方法返回它们的值。

FavouriteAdapter.java

imports omitted.

public class FavouriteAdapter extends ArrayAdapter<Favourite> {

    public FavouriteAdapter(Context context, ArrayList<Favourite> favourite) {
        super(context, 0, favourite);
    }

    @NonNull
    @Override
    public View getView(int position, View convertView, @NonNull ViewGroup parent) {
        if (convertView == null) {
            convertView = LayoutInflater.from(getContext()).inflate(R.layout.favourite_item, parent, false);
        }

        Favourite currentFavourite = getItem(position);

        TextView idTextView = (TextView) convertView.findViewById(R.id.id_text_view);
        idTextView.setText(currentFavourite.getId());

        TextView textTextView = (TextView) convertView.findViewById(R.id.text_text_view);
        textTextView.setText(currentFavourite.getText());

        return convertView;
    }
}

FavouriteActivity.java

此类使用并显示已使用适配器和 ListView 添加到 ArrayList 的事实集合。

imports omitted.

public class FavouriteActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_favourite);

        ArrayList<Favourite> allFavourites = MainActivity.allFavourites;

        FavouriteAdapter favouriteAdapter = new FavouriteAdapter(FavouriteActivity.this, allFavourites);

        ListView listView = (ListView) findViewById(R.id.list_view);
        listView.setAdapter(favouriteAdapter);
    }
}

MainActivity.java

这是显示事实的用户主视图 GUI。

最佳答案

您可以在 Favourite 中实现 Parcelable,并将列表传递到 Activity 中。 https://developer.android.com/reference/android/os/Parcelable.html

关于java - 在 Activity 之间共享 ArrayList 的良好编程实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47230993/

相关文章:

java - 我的类中变量和函数的可访问性

java - 我的日志文件是空的

android - ListView 下方有额外空间的 DialogFragment

android - 在 netbeans 上启动第一个 android hello world 的问题

java - Android 用户界面未更新

java - 如何使用 java 8 Stream API 将特定对象移动到列表的开头?

java - 返回由 n 个随机数组成的整数 ArrayList?

android - 旋转手机时 Activity 屏幕不旋转

安卓文字转语音

android - EditText 在恢复时不显示任何内容。 (被安卓系统破坏的 Activity )