良好的编程实践在活动之间共享ArrayList

时间:2017-11-10 20:56:29

标签: java android android-activity arraylist android-adapter

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

我遇到了在类之间共享/访问ArrayList的问题,因此我可以在ArrayList上调用更新方法(添加,删除等)。我也不确定要解决这个问题的最佳做法。

  1. 目前我已经在MainActivity.java中将我的ArrayList声明为public static final,在那里处理它的更新,然后在FavouriteActivity.java中访问此ArrayList并将其分配给那里的新ArrayList集合,如可以在代码如下。然而,这并不是我所知道的良好编程习惯,因此我的问题会在此处发布以获得指导。

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

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

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

  5. 理想情况下,应该在收藏夹列表中执行所有这些处理的位置?在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

    此类使用并显示已使用Adapter和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。

1 个答案:

答案 0 :(得分:1)

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