【问题标题】:Good programming practice sharing ArrayList between Activities良好的编程实践在活动之间共享 ArrayList
【发布时间】:2017-11-10 20:56:29
【问题描述】:

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

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

    1234563下面的代码。但是,这不是我知道的良好编程习惯,因此我将问题发布在这里以供指导。
  1. 我认为我不能使用 Intent 来共享/访问它,因为 ArrayList 存储 not 的对象。我看到了一个类似的问题推荐这个,但它对我不起作用。

  2. 我尝试在 MainActivity 中创建一个 FavouriteActivity 对象,从而从该类中 ArrayList 上的 FavouriteActivity 调用诸如 addFavourite() 之类的方法,但是遇到了几个错误。

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

理想情况下,收藏夹列表的所有这些处理应该在哪里进行?在 MainActivity、FavouriteActivity 还是 FavouriteAdapter 中?

谢谢大家。

Favorite.java

这个类有两个字段,都是代表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;
    }
}

FavoriteActivity.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。

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-03
      • 1970-01-01
      • 2016-11-14
      • 1970-01-01
      • 2017-05-07
      • 1970-01-01
      相关资源
      最近更新 更多