2011-12-09 12 views
1

ListViewを更新する方法を理解する上で問題があります。ユーザーがリストアイテムをクリックすると、そのアイテムはデータベースから削除され、ListViewは更新されてそこに表示されなくなります。しかし、リストは更新されず、私はそれを正しくやっているのか分からない。私はあなたが終了して、それが項目が削除されたときに、それだけで更新されません必要としてアプリケーションに一覧表示さを再入力するときのように正しく、データベースの更新を知ってListViewアダプターとの混乱

package com.typhoon2099.mediacatalogue; 

import android.os.Bundle; 
import android.app.ListActivity; 
import android.database.Cursor; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.BaseAdapter; 
import android.widget.ListAdapter; 
import android.widget.ListView; 
import android.widget.SimpleCursorAdapter; 

    public class DVDs extends ListActivity { 
    private DatabaseHelper database; 
    private static final String MEDIA_TYPE = "DVD"; 
    private Cursor ListCursor; 
    private BaseAdapter adapter; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     database = new DatabaseHelper(this); 
     database.open(); 

     ListCursor = database.selectMedia(MEDIA_TYPE); 
     database.close(); 
     startManagingCursor(ListCursor); 

     adapter = new SimpleCursorAdapter(this, 
      R.layout.listlayout, 
      ListCursor, 
      new String[] {DatabaseHelper.TABLE_NAME+".title", DatabaseHelper.TABLE_NAME+".author"}, 
      new int[] {R.id.text1, R.id.text2}); 
     setListAdapter(adapter); 

     ListView lv = getListView(); 
     lv.setTextFilterEnabled(true); 

     lv.setOnItemClickListener(new OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, View view, 
      int position, long id) { 
       database.open(); 
       database.deleteMedia(String.valueOf(id)); 
       ListCursor = database.selectMedia(MEDIA_TYPE); 
       adapter.notifyDataSetChanged(); 
       setListAdapter(adapter); 
       database.close(); 
      } 
     }); 
    } 
} 

は、ここに私のコードです。

答えて

0

アダプタのnotifyDataSetChanged()に電話してください。

+0

'adapter.notifyDataSetChanged();'?カーソルを更新した後は既にそこにあります。 –

+0

なぜsetListAdapter(アダプタ)を使用しますか。 onitemclicklistnerで? –

+0

私はリストを更新する方法を知りませんし、おそらくリロードや何かを引き起こすかもしれないと思ったので。 –

0

この亜種は機能しますか?

lv.setOnItemClickListener(new OnItemClickListener() { 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      database.open(); 
      database.deleteMedia(String.valueOf(id)); 
      database.close(); 
      adapter.notifyDataSetChanged(); // maybe use notifyDataSetInvalidated() 
     } 
    });