繁体   English   中英

在活动之间共享ArrayList的良好编程习惯

[英]Good programming practice sharing ArrayList between Activities

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

我在类之间共享/访问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。 这又没有用,遇到了几个问题。

理想情况下,对于“收藏夹”列表,所有这些处理都应该在哪里进行? 在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。

您可以在收藏夹中实施Parcelable,并将列表传递到活动中。 https://developer.android.com/reference/android/os/Parcelable.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM