Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在活动之间共享ArrayList的良好编程实践_Java_Android_Android Activity_Arraylist_Android Adapter - Fatal编程技术网

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

Java 在活动之间共享ArrayList的良好编程实践,java,android,android-activity,arraylist,android-adapter,Java,Android,Android Activity,Arraylist,Android Adapter,我正在尝试创建一个Android应用程序,在主活动中显示一组事实,用户可以将事实添加到另一个最喜欢的活动中 我在类之间共享/访问ArrayList时遇到问题,因此我可以调用ArrayList上的更新方法(添加、删除等)。我也不确定解决这个问题的最佳做法 目前,我已在MainActivity.java中将我的ArrayList声明为public static final,并在其中处理更新,然后在FavoriteActivity.java中访问此ArrayList,并将其分配给新的ArrayList

我正在尝试创建一个Android应用程序,在主活动中显示一组事实,用户可以将事实添加到另一个最喜欢的活动中

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

  • 目前,我已在MainActivity.java中将我的ArrayList声明为public static final,并在其中处理更新,然后在FavoriteActivity.java中访问此ArrayList,并将其分配给新的ArrayList集合,如下面的代码所示。然而,我知道这不是一个好的编程实践,因此我的问题被张贴在这里作为指导

  • 我认为我不能使用意图来共享/访问它,因为ArrayList存储的对象不是。我看到过一个类似的问题,建议这样做,但对我来说不起作用

  • 我尝试在MainActivity中创建FavoriteActivity对象,从而从该类中ArrayList上的FavoriteActivity调用addFavorite()等方法,但是遇到了几个错误

  • 我还尝试为FavoriteActivity设计一个构造函数,在创建时接受ArrayList,从而从MainActivity传递ArrayList。这又不行了,遇到了几个问题

  • 此外,理想情况下,应在何处对收藏夹列表执行所有这些处理?在MainActivity、FavoriteActivity或FavoriteAdapter中

    谢谢大家

    favorite.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;
        }
    }
    
    这个类有两个字段,都是表示ID和一些文本的字符串。在构造函数和两个get方法中初始化以返回其值

    FavoriteAdapter.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;
        }
    }
    
    导入被省略。
    公共类FavoriteAdapter扩展了ArrayAdapter{
    公共收藏夹适配器(上下文,ArrayList收藏夹){
    超级(上下文,0,收藏夹);
    }
    @非空
    @凌驾
    公共视图getView(int位置,视图转换视图,@NonNull视图组父级){
    if(convertView==null){
    convertView=LayoutInflater.from(getContext()).flate(R.layout.favorite_项,父项,false);
    }
    收藏夹CurrentFavorite=getItem(位置);
    TextView id TextView=(TextView)convertView.findViewById(R.id.id\u text\u视图);
    idTextView.setText(currentFavorite.getId());
    TextView TextView=(TextView)convertView.findViewById(R.id.text\u text\u视图);
    textView.setText(currentFavorite.getText());
    返回视图;
    }
    }
    
    FavoriteActivity.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;
        }
    }
    
    此类使用并显示已使用适配器和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);
        }
    }
    
    导入被省略。
    公共类FavoriteActivity扩展了AppCompatActivity{
    @凌驾
    创建时受保护的void(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity\u收藏夹);
    ArrayList AllFavorites=MainActivity.AllFavorites;
    FavoriteAdapter FavoriteAdapter=新的FavoriteAdapter(FavoriteActivity.this,AllFavorites);
    ListView ListView=(ListView)findViewById(R.id.list\u视图);
    setAdapter(FavoriteAdapter);
    }
    }
    
    MainActivity.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;
        }
    }
    

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

    您可以在收藏夹中实现Parcelable,并将列表传递到活动中。