私は mylikes と呼ばれる 1 つのアクティビティを持っています。メイン アクティビティから呼び出すことができ、気に入ったアイテムのリストを表示する必要があります。プログラムと呼ばれる別のアクティビティには、好きなボタンを押すアイテムのリストがあり、そのアイテムを好きなアイテムリストに追加して、Mylike アクティビティに表示する必要があります。その項目をプログラム アクティビティの配列に追加していますが、メインから mylike アクティビティを呼び出すと、強制終了エラーが発生します。配列リストをグローバルにする方法を教えてください。
4 に答える
デフォルトのアプリケーション クラスを独自のものでオーバーライドし、そこから配列を作成して使用できます。MyApplication というアプリケーションがある場合は、クラスを追加します
public class MyApplication extends Application {
public ArrayList myGlobalArray = null;
public MyApplication() {
myGlobalArray = new ArrayList();
}
}
データを配列に追加するには、次を使用します。
((MyApplication)getApplicationContext()).myGlobalArray = anyarray;
その後、次のような方法でアクティビティにアクセスできます
((MyApplication)getApplicationContext()).myGlobalArray ... etc.
アプリケーション マニフェストでは、名前をアプリケーション ブロックに追加して、拡張アプリケーション クラスに名前を付ける必要もあります。
<application
android:icon="@drawable/icon"
android:name=".MyApplication" ...
すべてのアクティビティがアクセスする必要があるグローバル スコープの複雑なオブジェクトがあり、IMO で最も簡単な方法であるシリアライズ/デシリアライズをしたくない場合、より単純なシナリオでは、エクストラをインテントに入れてアクティビティを開始するときにアイテムを渡すことができます。
シングルトンも使用できますが、アプリケーション クラスは管理が非常に簡単です。
私はコードをテストしたりコンパイルしたりしませんでした。
Application クラスのドキュメントのApplicationへのリンクは次のとおりです。
いくつかのシングルトンクラスを使用して好きな配列を保持し、このリストを複数のアクティビティで共有できます。
public class LikeManager{
List<Item> likes;
//....
private LikeManager(){
//...
}
public LikeManager getInstance(){
//...
}
public List<Item> getLikes(){
return likes;
}
}
したがって、アクセスが必要な場合likes
は、電話してくださいLikeManager.getInstance().getLikes()
Application クラスを使用してこのデータを保存し、すべてのアクティビティで使用できます
public class BusinessClass extends Application
{
public ArrayList array = new ArrayList();
}
次に、次のコードを使用して任意のアクティビティで呼び出します
BusinessClass appState = ((BusinessClass)getApplicationContext());
ArrayList myarray=appState.array;
Android では、何かをグローバルに維持し、2 つ以上のアクティビティで共有したい場合は、Application calss を使用できます。
詳細については
http://developer.android.com/reference/android/app/Application.html
最も簡単な方法は、アプリの他の部分が ArrayList の値を取得および設定できるようにする public getter と setter を用意することです。
それを除けば、SharedPreferences、どこかのファイルに書き込むか、データをデータベースに保存することができます。