2017-11-10 220 views
0

我正在尝试创建一个Android应用程序,以便在主活动中显示一组事件,其中用户可以将事实添加到正在收藏的其他活动。良好的编程习惯在活动之间共享ArrayList

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

  1. 目前我已经说过我是ArrayList中作为MainActivity.java公共静态最终在那里就可以了更新处理,则此ArrayList是FavouriteActivity.java访问并分配到一个新的ArrayList集合那里,可以看出下面的代码。然而,这是不好的编程实践,我知道,因此我的问题被张贴在这里作为指导。

  2. 我不认为我可以使用Intent来共享/访问它,因为ArrayList存储的对象不是。我看到过一个类似的问题,但是它对我没有帮助。

  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。

回答