6

2つの単純なアクティビティがあります-Activity1:配列からのListView Activity2:Activity1でクリックされた行を編集するためのEditText

Activity2で値を編集してActivity1に戻ると、ListViewは新しい値をリロードしません。

Activity2から戻ったとき、またはActivity1を再開したとき、またはリストを更新する何かを実行したときに、ListViewを更新したい。

私のコード:

static ArrayAdapter<String> dataAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
            // Loading the values to list array
        String[][] fulllist = loadArrays();
        String[] list = new String[fulllist.length];
        for(int i = 0; i<fulllist.length; i++) {
            list[i] =  fulllist[i][1];
            }
            // --------------------------------

            dataAdapter = new ArrayAdapter<String>(this,
                                android.R.layout.simple_list_item_1,
                                list);
            setListAdapter(dataAdapter);
            }
@Override
public void onResume() {
        super.onResume();
        // Loading the values to list array
        String[][] fulllist = loadArrays();
        String[] list = new String[fulllist.length];
        for(int i = 0; i<fulllist.length; i++) {
            list[i] =  fulllist[i][1];
            }
        // --------------------------------

        dataAdapter = new ArrayAdapter<String>(this,
                            android.R.layout.simple_list_item_1,
                            list);
        dataAdapter.notifyDataSetChanged();
}

loadArrays()は、SharedPreferencesからStringArrayに変換する単なるメソッドです。Activity2は新しいデータをSharedPreferencesに保存し、Activity1が(新しいデータを使用して)読み取ることができます。「メインアクティビティ」(Activity1ではない)に戻ってからActivity1に戻ると、新しいデータが表示されますが、Activity2からすぐに戻ったときにこのデータが更新されるようにしたいと思います。

loadArrays()メソッド:pastebin.com/MHwNC0jK

よろしくお願いします!

4

3 に答える 3

14

最初のアクティビティのアイテムをクリックしたら、2番目のアクティビティを次のように開始しますstartActivityForResult()

そして、2番目のアクティビティでは、を入力した後EditText、おそらくボタンがあります。そして、onClickそのボタン呼び出しの中で、

intent.putExtra("edittextvalue", findViewById(R.id.edittext).getText().toString());
setResult(RESULT_OK, intent);
finish();

ここで最初のアクティビティに戻り、ここでonActivityResult()コールバックを実装する必要があります。そのインテントのエクストラからデータを抽出し、配列にそれぞれのアイテムを設定して、を呼び出すことができますnotifyDataSetChanged()

これは理想的にはあなたがそれを行うべき方法です。

startActivityForResult()の使用方法の詳細については、このリンクを試してください-http: //manisivapuram.blogspot.in/2011/06/how-to-use-startactivityforresult.html

于 2012-11-30T11:40:23.757 に答える
1

1)参照ListViewを取得します

mListView = (ListView)findViewById(R.id.auto_listview);

2)値を変更してもう一度アダプターを作成します

MyAdapter myAdapter = new MyAdapter(getApplicationContext(), 
                                    R.layout.locations_list_item_layout,dataArray;
mListView.setAdapter(myAdapter);

setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

                public void onItemSelected(AdapterView<?> adapterView,
                        View view, int i, long l) {

myAdapter = new MyAdapter(getApplicationContext(), 
    //pass changed values vlues array                               R.layout.locations_list_item_layout,dataArray;
mListView.setAdapter(myAdapter);

}

                public void onNothingSelected(AdapterView<?> arg0) {
                    // TODO Auto-generated method stub

                }
            });
于 2012-11-30T11:17:40.800 に答える
-3

フルリストをGloble変数として宣言し、静的配列リストを使用します。

于 2012-11-30T11:16:42.243 に答える