0

私は非常に多くの方法と推奨事項を試みましたが、私のコードはうまくいきません。これが私がやったことです。新しいアイテムを追加した後、そのアイテムがリストに表示されるようにするには、どのコードを追加する必要がありますか?

コンテキストは次のとおりです。

アクションバーには、「アイテムを追加」ボタンがあります。ダイアログが開き、ダイアログのonclickで、単一のフィールドに入力した単語がデータベース(MySQL)に挿入され、ダイアログが閉じられます...これが私の問題です....何もありません.

編集:私はこれを試しました - yourAdapter.notifyDataSetChanged(); 何も変わらないので、どこに置くか、どのように使用するかがわかりません。

 public class Items extends ListActivity {


List<String> items = null;
String NewItem;
ArrayAdapter<String> adapter;
ListView listView;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);


    items = new ArrayList<String>();

    new task().execute();

}

 // Class that sets up ListView and populates from database on initial Activity Load
class task extends AsyncTask<String, String, Void> {

    @Override
    protected Void doInBackground(String... params) {


        // HttpPost ... etc
                    // BufferRedReader .. etc 


    }

    protected void onPostExecute(Void v) {

        String item;
        try {
            // JSON Stuff
            }
        } catch (JSONException e1) {


 //  Here is where ListView is set up when Activity/page first starts

        listView = getListView();
        listView.setTextFilterEnabled(true);
        listView.setOnItemClickListener(new OnItemClickListener() {

            public void onItemClick(AdapterView<?> arg0, View arg1,
                    int arg2, long id) {

                Intent i = new Intent(getApplicationContext(), Rate.class);
                i.putExtra("name", items.get(arg2));
                i.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
                startActivity(i);

            }
        });

        adapter = new ArrayAdapter<String>(Items.this, R.layout.list, items);
        setListAdapter(adapter);


    }
}



@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle item selection
    switch (item.getItemId()) {
    case R.id.Add_Item:

        final Dialog dialog = new Dialog(Items.this);
        dialog.setContentView(R.layout.insert_dialog);
        dialog.setTitle("Insert Item");
        dialog.setCancelable(true);
        dialog.show();

        final EditText etInsert = (EditText) dialog
                .findViewById(R.id.etInsertItem);

        Button bInsert = (Button) dialog.findViewById(R.id.bInsert);
        bInsert.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {

                NewItem = etInsert.getText().toString();
                new insertTask().execute();


                dialog.dismiss();

            }
        });

        return true;
    case R.id.About:

        return true;
    default:
        return super.onOptionsItemSelected(item);
    }
}


 // This Class is the "inserting item" task inside the dialog

class insertTask extends AsyncTask<String, String, Void> {

    @Override
    protected Void doInBackground(String... params) {


        try {
            // HttpPost Stuff ... running insert Script to Database here

        } 

    }

    protected void onPostExecute(Void v) {

            // Add ListView Refresh Here????

    }


}
 }
4

3 に答える 3

3

adapter.notifyDataSetChanged();データを更新した直後に使用します。それで十分なはずです。notifyDataSetChanged();モデルデータを更新した後、アダプター自体をラインに入れることもできます。

ところで。あなたのコードにはリストの更新が表示されません。もちろん、を呼び出す前に、リストのモデル データを更新する必要がありますnotifyDataSetChanged();

于 2012-06-24T15:52:41.463 に答える
1

使用してみることができます

yourAdapter.notifyDataSetChanged();

あなたのonPostExecute方法で。

于 2012-06-24T15:47:14.133 に答える
1

list<String> itemsListItems のデータを取得するためにアダプターで使用されます。このリストに新しい項目を追加する必要があります。つまり、asyncTaskのをitems呼び出します。adapter.notifyDataSetChanged();onPostExecute()insertTask

于 2012-06-24T15:57:33.363 に答える