0

次の問題があります。ActivityAのデータベースからデータを読み取り、選択した1つの文字列をActivityBに送信して、ListViewに表示したいと思います。インテントを使用して正常に機能していますが、表示できる文字列は1つだけです。ActivityAをリロードした後、listViewがクリアされたと思います。

そこで、次のことを試しました。ArrayLstという別のクラスで、次の2つのグローバル変数を定義しました。

public static ArrayList<String> arrayList = new ArrayList<String>();
public static MyAdapter arrayAdapter=null;

そして、ActivityAでは、onClick関数でこれを行っています。

ArrayLst.arrayList.add(0, myEditText.getText().toString());
ArrayLst.arrayAdapter.notifyDataSetChanged();
Intent intent = new Intent(ActivityA.this, ActivityB.class);
startActivity(intent);

ActivityBでは、リストを表示したいので、これを次のように呼んでいます。

lstView.setAdapter(ArrayLst.arrayAdapter);

ただし、ActivityAのボタンをクリックすると、アプリがクラッシュします。LogCatはそのラインのためにそれを言います

ArrayLst.arrayAdapter.notifyDataSetChanged();

この行を削除してもクラッシュしませんが、結果は得られません。私は何が間違っているのですか?助けてくれてありがとう。

ps:私はAndroidを初めて使用するので、理解できるように答えを単純にしてください:)

4

1 に答える 1

1

arrayAdapterを初期化しないため、クラッシュしていると思います。

カスタムアダプタ(MyAdapter arrayAdapter)を使用しているのはなぜですか?

ActivityBには、静的ArrayListが必要です(これはあなたが持っているようです)

public static ArrayList<String> arrayList = new ArrayList<String>();

次に、クラスのグローバルスコープで宣言されたActivityBのArrayAdapterが必要になります

public static ArrayAdapter adapter;

次に、onCreateでアダプタを初期化します

adapter = new ArrayAdapter(this, android.R.simple_list_1, arrayList);

ActivityBがListActivityを拡張する場合は、

setListAdapter(adapter);

ActivityBがActivityを拡張する場合は、

setContentView()の下の次の

ListView list = (ListView)findViewById(R.id.YOURLISTID);
list.setAdapter(adapter);

ArrayListにデータを追加するときはいつでも、ActivityB.adapter.notifyDataSetChanged()を呼び出します。

あなたが具体的に何をしているのかを知らなければ、それはあなたが達成しようとしていることと一致していないかもしれないので、私はより良い考えを提案することはできません。

于 2012-08-17T18:04:18.473 に答える