1

Android Sqlite DB Dev は初めてなので、皆さんの助けが必要です。基本的な CRUD 操作を行うことができました。リストビューを更新して、新しく追加されたデータを表示する方法を知りたいです。adapter.notifyDataSetChanged を調べましたが、なぜうまくいかないのでしょうか。これが私がこれまでに試したことです

   private void initControls() {

    SearchAuto = (AutoCompleteTextView)findViewById(R.id.autoCompleteTextView1);
    String[] SearchItems = getResources().getStringArray(R.array.DogSearch);
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,R.layout.searchitems,SearchItems);
    SearchAuto.setAdapter(adapter);
    SearchAuto.setThreshold(0);

    search = (Button) findViewById (R.id.handle);
    search.setOnClickListener(this);
    lv = (ListView) findViewById (R.id.lv);

    values = dbHelper.getAllAnimals(ANIMALTYPE);
    for (int i = 0; i < values.length; i++) {
        lvAdapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, values);
        lv.setAdapter(lvAdapter);
    }

    // TODO onItemClick
    lv.setOnItemClickListener(new OnItemClickListener() {

        public void onItemClick(AdapterView<?> parent, View v, int position, long id)
         {
            String strDog = parent.getItemAtPosition(position).toString();

            Intent i = new Intent(DogClass.this, Dogs.class);
            i.putExtra("dog_name", strDog);
            startActivity(i);    
            finish();
         }
    });

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.addanimal, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    // get prompt_addprayer.xml view
    LayoutInflater li = LayoutInflater.from(this);
    View promptsView = li.inflate(R.layout.prompt_addanimal, null);

    AlertDialog.Builder alertDialogBuilder = 
            new AlertDialog.Builder(this);

    // set prompts.xml to alertdialog builder
    alertDialogBuilder.setView(promptsView);

    final EditText etBreed = (EditText) promptsView
            .findViewById(R.id.etBreed);

    final EditText etDescription = (EditText) promptsView
            .findViewById(R.id.etDescription);

    final EditText etDiet = (EditText) promptsView
            .findViewById(R.id.etDiet);

    final EditText etShelter = (EditText) promptsView
            .findViewById(R.id.etShelter);

    final EditText etHygiene = (EditText) promptsView
            .findViewById(R.id.etHygiene);

    final EditText etMedication = (EditText) promptsView
            .findViewById(R.id.etMedication);

    // set dialog message
    alertDialogBuilder
            .setCancelable(false)
            .setPositiveButton("OK",
                    new DialogInterface.OnClickListener() {
                        public void onClick(
                                DialogInterface dialog,
                                int id) {

                            String strAnimalType = ANIMALTYPE;
                            String strBreed = etBreed.getText().toString();
                            String strDesc = etDescription.getText().toString();
                            String strDiet = etDiet.getText().toString();
                            String strShelter = etShelter.getText().toString();
                            String strHygiene = etHygiene.getText().toString();
                            String strMedication = etMedication.getText().toString();

                                dbHelper.addAnimalInfo(strAnimalType, strDesc, 
                                        strDiet, strShelter, strHygiene, strMedication, strBreed);
                                Toast.makeText(DogClass.this, "Data has been added successfully!",
                                        Toast.LENGTH_SHORT).show();

                                lvAdapter.notifyDataSetChanged();
                        }

                    })
            .setNegativeButton("Cancel",
                    new DialogInterface.OnClickListener() {
                        public void onClick(
                                DialogInterface dialog,
                                int id) {
                            dialog.cancel();
                        }
                    });

    // create alert dialog
    AlertDialog alertDialog = alertDialogBuilder.create();
    // show it
    alertDialog.show();
    return true;



}

何か案は?私は本当にこれを機能させる必要があります。ありがとう

4

1 に答える 1

1
dbHelper.addAnimalInfo(strAnimalType, strDesc, strDiet, strShelter, strHygiene, strMedication, strBreed);
Toast.makeText(DogClass.this, "Data has been added successfully!",
                                        Toast.LENGTH_SHORT).show();

lvAdapter.notifyDataSetChanged();

ここがあなたに欠けていたところです。あなたがしたことは、データベースにデータを挿入しただけですが、データベースからデータを取得してアダプターにバインドするために残っています。その後、 を呼び出すことができnotifyDataSetChanged();、目的を達成できます...

これを試して:

dbHelper.addAnimalInfo(strAnimalType, strDesc, strDiet, strShelter, strHygiene, strMedication, strBreed);
    Toast.makeText(DogClass.this, "Data has been added successfully!",
                                            Toast.LENGTH_SHORT).show();
values = dbHelper.getAllAnimals(ANIMALTYPE);
lvAdapter.clear();
lvAdapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1, values);

    lvAdapter.notifyDataSetChanged();

注:このように書くべきではありません。あなたのコード:

for (int i = 0; i < values.length; i++) {
        lvAdapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, values);
        lv.setAdapter(lvAdapter);
    }

getAllAnimals()メソッドが arrayList を返す場合は、次のことを行う必要があります。

lvAdapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, values);
        lv.setAdapter(lvAdapter);

ArrayAdapter コンストラクターの最後の引数を渡す必要List<Item>があります。そして、 を呼び出すだけsetAdapter(adapter)ですListView

詳細については、次の SO リンクを参照してください: notifyDataSetChanged の例 http://androidadapternotifiydatasetchanged.blogspot.in

于 2013-10-05T10:23:37.510 に答える