2011-08-07 4 views
0

私はまだAndroidとEclipseの新機能ですが、そのタイトルはほとんどすべてです。私はリストビューを持っている私はDBの行から移入した。選択したリストビューアイテムを取得し、ボタンがクリックされたときにDBから行を削除し、これが完了したらListViewをリフレッシュします。これまでのところ、私のコードはリストに値を設定しています。どんな助けでも大歓迎です。 OKDBにデータが保存されています。リストビューの削除はボタンのボタンでクリックしてください。

public class ViewListingsActivity extends Activity implements OnClickListener { 
    SQLiteDatabase db; 
    ListView listview; 
    Button button; 
    SimpleCursorAdapter adapter; 
    String value; 
    private static final String TAG = DBHelper.class.getSimpleName(); 
    public static final String DB_ADDRESS = BaseColumns._ID; 
    public static final String DB_DESCRIPTION = "Description"; 
    public static final String DB_URL = "URL"; 
    final String dbTable = "Realtor_SMS_Table"; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.viewlisting); 
     listview = (ListView) findViewById(R.id.list); 
     button = (Button) findViewById(R.id.button1); 
     button.setOnClickListener(this); 
     DBHelper dbhelper = new DBHelper(ViewListingsActivity.this); 
     db = dbhelper.getWritableDatabase(); 

     Cursor cursor = db.query(dbTable, null, null, null, null, null, null); 
     startManagingCursor(cursor); 

     String[] from = new String[] { DB_ADDRESS, DB_DESCRIPTION, DB_URL }; 
     int[] to = new int[] { R.id.textlistaddress, R.id.textlistdescription, 
       R.id.textlisturl }; 
     adapter = new SimpleCursorAdapter(this, R.layout.rowlist, cursor, from, 
       to); 

     listview.setAdapter(adapter); 
     listview.setChoiceMode(1); 

    } 

    public void onClick(View arg0) { 
     db.delete(dbTable, "_id=" + value, null); 
     adapter.notifyDataSetChanged(); 

     Log.d("wtf", "deleted: " + value); 

    } 

} 

、ここに私の新しく編集されたコードは次のとおりです。

public class ViewListingsActivity extends Activity implements OnClickListener { 
    SQLiteDatabase db; 
    ListView listview; 
    Button button; 
    SimpleCursorAdapter adapter; 
    String value; 
    OnItemClickListener listener; 
    Cursor newcursor; 
    String deleteinfo; 

    private static final String TAG = DBHelper.class.getSimpleName(); 
    public static final String DB_ADDRESS = BaseColumns._ID; 
    public static final String DB_DESCRIPTION = "Description"; 
    public static final String DB_URL = "URL"; 
    final String dbTable = "Realtor_SMS_Table"; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.viewlisting); 
     listview = (ListView) findViewById(R.id.list); 
     button = (Button) findViewById(R.id.button1); 
     button.setOnClickListener(this); 
     DBHelper dbhelper = new DBHelper(ViewListingsActivity.this); 
     db = dbhelper.getWritableDatabase(); 

     Cursor cursor = db.query(dbTable, null, null, null, null, null, null); 
     startManagingCursor(cursor); 

     String[] from = new String[] { DB_ADDRESS, DB_DESCRIPTION, DB_URL }; 
     int[] to = new int[] { R.id.textlistaddress, R.id.textlistdescription, 
       R.id.textlisturl }; 
     adapter = new SimpleCursorAdapter(this, R.layout.rowlist, cursor, from, 
       to); 

     listview.setAdapter(adapter); 
     listview.setChoiceMode(1); 
     listview.setOnItemClickListener(listener); 

    } 
    public void onItemClick (AdapterView<?> parent, View view, int position, long id) { 

    newcursor = ((SimpleCursorAdapter)listview.getAdapter()).getCursor(); 
    deleteinfo = newcursor.getString(1);//getString(0); 
    } 

    public void onClick(View arg0) { 
     db.delete(dbTable, "_id=" + deleteinfo, null); 
     adapter.notifyDataSetChanged(); 

     Log.d("wtf", "deleted: " + deleteinfo); 

    } 

} 

私deleteinfo文字列は、なぜそれが適切な列の値を取得していない、nullを返し続けますか?

+1

は一種の単一の質問形式で複数の質問をする質問/回答スキーマはそれがありません敗北:Adapter.onItemClickListener | Android Developers

参照してください。この位置は、カーソルが行を指してつかむために使用することができますか?それにもかかわらず、onItemClickのgetCursor()を呼び出さないでください - 私の編集で私のコードをもっと詳しく見てください。 –

+0

申し訳ありませんが、あなたは完全に正しいです。とにかく、私はそれを理解した。あなたたち最高!! – Ryan

答えて

0

削除するには、通常のクエリでデータベースから行を削除するだけです。その後、してSimpleCursorAdapterを更新:

Cursor cursor = ((SimpleCursorAdapter)listview.getAdapter()).getCursor(); 
cursor.requery(); 


これは、UIスレッド上で実行する必要があります

編集
設定し、選択した項目の位置パラメータを提供しますOnItemClickListener 。

Cursor cursor = (Cursor) ((SimpleCursorAdapter)listview.getAdapter()).getItem(position); 
+0

ユーザーが選択したListViewアイテム(DB内の行)を知るにはどうすればよいですか? – Ryan

+0

それは...リスト内の位置のための長いIDを私に与える?私はそれをデータベースの行にどのように関連づけているのか混乱しています – Ryan

関連する問題