在 Activity 之间共享 ArrayList 的良好编程习惯
Good programming practice sharing ArrayList between Activities
我正在尝试创建一个 Android 应用程序以在主 activity 中显示一组事实,用户可以在其中向另一个 activity 收藏的事实添加事实。
我在 sharing/accessing class 之间的 ArrayList 遇到问题,因此我可以调用 ArrayList 上的更新方法(添加、删除等)。我也不确定解决此问题应遵循的最佳做法。
目前我已经在 MainActivity.java 中将我的 ArrayList 声明为 public static final,其中处理了它的更新,然后在 FavouriteActivity.java 中访问并分配了这个 ArrayList到一个新的 ArrayList collection ,如下面的代码所示。然而,这不是我所知道的良好编程实践,因此我的问题被发布在这里以供指导。
我不认为我可以使用 Intent 来 share/access 它,因为 ArrayList 存储 objects of not 。我看到一个类似的问题推荐这个但是它对我不起作用。
我试图在 MainActivity 中创建一个 FavouriteActivity object,从而从 class 中 ArrayList 上的 FavouriteActivity 调用 addFavourite() 等方法,但是遇到了几个错误有了这个。
我还尝试为 FavouriteActivity 设计一个构造函数,它在创建时接受 ArrayList,从而从 MainActivity 传递 ArrayList。这又没有用,遇到了几个问题。
此外,理想情况下,应该在哪里对收藏夹列表进行所有这些处理?在 MainActivity、FavouriteActivity 或 FavouriteAdapter 中?
谢谢大家
Favourite.java
这个class有两个字段,都是代表一个ID和一些文本的字符串。在构造函数和两个 get 方法中初始化为 return 它们的值。
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
此 class 使用并显示 collection 已使用适配器和 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,并将列表传递给activity。
https://developer.android.com/reference/android/os/Parcelable.html
我正在尝试创建一个 Android 应用程序以在主 activity 中显示一组事实,用户可以在其中向另一个 activity 收藏的事实添加事实。
我在 sharing/accessing class 之间的 ArrayList 遇到问题,因此我可以调用 ArrayList 上的更新方法(添加、删除等)。我也不确定解决此问题应遵循的最佳做法。
目前我已经在 MainActivity.java 中将我的 ArrayList 声明为 public static final,其中处理了它的更新,然后在 FavouriteActivity.java 中访问并分配了这个 ArrayList到一个新的 ArrayList collection ,如下面的代码所示。然而,这不是我所知道的良好编程实践,因此我的问题被发布在这里以供指导。
我不认为我可以使用 Intent 来 share/access 它,因为 ArrayList 存储 objects of not 。我看到一个类似的问题推荐这个但是它对我不起作用。
我试图在 MainActivity 中创建一个 FavouriteActivity object,从而从 class 中 ArrayList 上的 FavouriteActivity 调用 addFavourite() 等方法,但是遇到了几个错误有了这个。
我还尝试为 FavouriteActivity 设计一个构造函数,它在创建时接受 ArrayList,从而从 MainActivity 传递 ArrayList。这又没有用,遇到了几个问题。
此外,理想情况下,应该在哪里对收藏夹列表进行所有这些处理?在 MainActivity、FavouriteActivity 或 FavouriteAdapter 中?
谢谢大家
Favourite.java
这个class有两个字段,都是代表一个ID和一些文本的字符串。在构造函数和两个 get 方法中初始化为 return 它们的值。
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
此 class 使用并显示 collection 已使用适配器和 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,并将列表传递给activity。 https://developer.android.com/reference/android/os/Parcelable.html