1

現在、私は Android アプリに取り組んでいますが、解決できない問題に遭遇しました。私は2つの活動をしています。そのうちの 1 つで、ArrayList を public static として定義します。このリストは、リストビューのコンテンツとして使用されます。その他のアクティビティでは、その特定のリストのアイテムを編集するか、削除したいと考えています。

問題: 私のサムスン ギャラクシー S II (Android バージョン 4.0.4) では正常に動作しますが、SGSIII (4.1 だと思います) などの他のデバイスでは、そのリストの同期に問題があります。基本的に、その 2 番目のアクティビティが終了して最初のアクティビティに戻ると、すべての変更が取り消されたように見えます...

これは、最初のアクティビティのリストビューの更新関数のコードです。このメソッドでは変更は認識されません。

private void updateList() { 

    String[] values = new String[hatCommandList.size()];

    for(int i = 0; i < values.length;i++) {             

        values[i] = ((Command)hatCommandList.get(i)).getRealCommand();

    }           
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id.text1, values);     
    ListViewSentCommands.setAdapter(adapter);       
}

ご覧のとおり、特別なことは何もありません。ここでは、「hatCommandList」を編集する 2 番目のアクティビティのコードを示します。

public void onClick(View v) {               
    SettingsActivity.hatCommandList.remove(position);                       
    finish();

}

リスト内の位置を指すために使用される「位置」には、明らかに正しい値が含まれています。すでに確認しました。

とにかく、一部のデバイスで機能する理由と機能しない理由を教えていただければ幸いです...

事前にご挨拶と感謝、ティモ

4

3 に答える 3

1

こんなことしないで...

SettingsActivity.hatCommandList.remove(position);

最も重要なことpublicは、 でオブジェクトやメソッドを作成したりActivity、他の Android アプリケーション コンポーネントからそれらを使用したりしActivityないことです。

この方法でデータを共有したい場合は、POJO ヘルパー クラスを作成してArrayListそこに保持することをお勧めします。次に、2 番目のActivityサーバーが変更を加え、最初のActivityサーバーが再開したときに、データの変更を確認してアダプターを更新します。

于 2012-11-23T00:02:06.003 に答える
0

わかりました、私は問題を見つけました:

最初のアクティビティが開始されると、ファイルからそのリストにデータが読み込まれます。これは onCreate 関数で発生します。

問題は、Android 4.0.4 を搭載した SGSII デバイスで、問題なく 2 番目のアクティビティを終了すると、最初のアクティビティにフォーカスが戻ることです。

しかし、4.1 の SGSIII では、実際には再開するだけですが、onCreate メソッドが再び使用されます。現時点では理由はわかりませんが、それは解決できる問題だと思います。

Android SDK の開発者が変更した理由と、それを止める方法を教えてください。

PS: 2. アクティビティと onActivityResult 関数を開始するために startActivityForResult メソッドを呼び出しています。

于 2012-11-23T20:54:09.983 に答える