私はAndroidアプリケーションを作成して、ユーザーがファクトを別のアクティビティ(お気に入り)に追加できる主なアクティビティにファクトのセットを表示しようとしています。良いプログラミングの練習共有アクティビティ間のArrayList
クラス間でArrayListの共有/アクセスに問題が発生しています。そのため、ArrayListで更新メソッド(add、removeなど)を呼び出すことができます。これを解決するためのベストプラクティスについては確かではありません。
現在、私はそれに更新が処理され、このArrayListのは、に見られるように、その後FavouriteActivity.javaにアクセスし、そこに新しいのArrayListコレクションに割り当てられているMainActivity.java内のpublic static finalとしての私のArrayListを宣言しているに以下のコード。しかしこれは私が知っているよいプログラミングの練習ではないので、私の質問は指導のためにここに掲載されています。
私はIntentを使って共有/アクセスすることはできませんが、ArrayListはオブジェクトを格納していないと思います。私はこれに似たような質問を見ましたが、それは私にとってはうまくいきませんでした。
MainActivity内でFavouriteActivityオブジェクトを作成しようとしましたが、そのクラス内のArrayListのFavouriteActivityからaddFavourite()などのメソッドを呼び出しましたが、これにいくつかのエラーが発生しました。
また、FavouriteActivityのコンストラクタを工夫して、作成時にArrayListを受け取り、MainActivityのArrayListを通過させようとしました。これは再びうまくいかず、いくつかの問題が発生しました。
また、この処理のすべてをお気に入りリストのどこで実行するのが理想的ですか? MainActivity、FavouriteActivityまたはFavouriteAdapter内では?
ありがとうございます。
Favourite.java
このクラスは、2つのフィールドがあり、両方がIDとテキストを表現するための文字列です。コンストラクタで初期化され、2つのメソッドから値が返されます。
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
このクラスは、アダプタとリストビューを使用して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です。