2013-10-05 111 views
1

我是新来的Android Sqlite DB Dev't,所以我需要你的帮助球员。我能够完成基本的CRUD操作。现在我想知道如何刷新列表视图来显示新添加的数据。我查看了adapter.notifyDataSetChanged,但我想知道为什么它不适合我。这是我迄今为止所尝试的刷新列表视图/显示新增数据到列表视图android

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; 



} 

任何想法?我真的需要得到这个工作。谢谢

+1

什么这个循环为:对(INT I = 0; I hasan83

回答

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 example http://androidadapternotifiydatasetchanged.blogspot.in

+0

感谢您的链接和您的帮助。 – Dunkey

+0

@Dunkey不客气。快乐的编码。 –