我正在尝试创建一个Android应用程序,以便在主活动中显示一组事件,其中用户可以将事实添加到正在收藏的其他活动。良好的编程习惯在活动之间共享ArrayList
我遇到了在类之间共享/访问ArrayList的问题,因此我可以在ArrayList上调用更新方法(添加,删除等)。我也不确定要解决这个问题需要遵循的最佳做法。
目前我已经说过我是ArrayList中作为MainActivity.java公共静态最终在那里就可以了更新处理,则此ArrayList是FavouriteActivity.java访问并分配到一个新的ArrayList集合那里,可以看出下面的代码。然而,这是不好的编程实践,我知道,因此我的问题被张贴在这里作为指导。
我不认为我可以使用Intent来共享/访问它,因为ArrayList存储的对象不是。我看到过一个类似的问题,但是它对我没有帮助。
我试图在MainActivity中创建一个FavouriteActivity对象,从而在该类的ArrayList中从FavouriteActivity调用诸如addFavourite()的方法,但遇到了几个错误。
我也尝试为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。