2016-09-04 1 views
0

私は検索と運で検索、これは私のコードonItemLongClick機能付SQLiteのID列とonItemLongClick

// Product List 
 
    public void setProductList() { 
 

 
     productDB = new DatabaseHelper(this); 
 
     listView = (ListView) findViewById(R.id.list); 
 
     listAdapter = listView.getAdapter(); 
 

 

 
     Cursor prodView = productDB.getAllData(); 
 
     prodView.moveToFirst(); 
 
     ArrayAdapter<String> listAdaptor = new ArrayAdapter<String>(this, R.layout.medicinelistmenu, R.id.productlistsTextView1); 
 

 
     while (prodView.moveToNext()) { 
 
      listAdaptor.add(prodView.getString(1)); 
 
      
 
     } 
 

 
     listView.setAdapter(listAdaptor); 
 

 

 
     listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { 
 

 
      @Override 
 
      public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int pos, long id) { 
 

 
       productDB.deleteProduct(id); 
 
       Toast.makeText(medicineList.this, "Item Deleted", Toast.LENGTH_LONG).show(); 
 
       finish(); 
 
       startActivity(getIntent()); 
 

 
       return true; 
 
      } 
 

 
     }); 
 
    }

で、他の記事は私に長い値を言っているされていますAdapterView内の配列はSQLLite ID列になりますが、配列内の位置と同じ値になります。

これは私のDatabaseHelperクラスの削除機能は

public void deleteProduct(long ID) 
{ 
    SQLiteDatabase productsdb = this.getWritableDatabase(); 
    productsdb.execSQL("DELETE FROM "+ PRODTABLE_NAME +" WHERE ID = "+ ID); 

} 

は誰でもデータベースIDの値を取得する方法上の任意の光を当てることができているしてください。

+1

'ArrayAdapter'を使用せず、代わりに' CursorAdapter'を使用してください。おそらく 'SimpleCursorAdapter' – pskink

+0

ありがとう、私はそれを外出します。 –

+0

'SimpleCursorAdapter'を使用する場合、' onItemLongClick(AdapterView arg0、ビューarg1、int pos、long id)の最後のパラメータはデータベースIDです。 – pskink

答えて

1

ロングは、DB内の製品のIDではなく、クリックされたアイテムの行IDです。

名ではなくDELETE FROM table WHERE ID = idの一意である場合は、ここで名前缶を
DELETE FROM table WHERE NAME = nameを使用することができます。また

@Override 
     public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int pos, long id) { 
      TextView prdName = arg1.findViewById(R.id.textView_prdname); 

      // now call the method which take productName as parameter and return productId 
      int prdID = productDB.getProductID(prdName.getText().toString()); 

      // Now Pass that ID to deleteProduct 
      productDB.deleteProduct(prdID); 
      Toast.makeText(medicineList.this, "Item Deleted", Toast.LENGTH_LONG).show(); 
      finish(); 
      startActivity(getIntent()); 

      return true; 
     } 

パラメータString productName

を持つ編集onItemLongClick()IDを返すDBHelperクラスのメソッドを作成します。 prdName.getText()
から取得することができます。この方法では、1つのクエリを実行するだけで済みます。

+1

'" Longはクリックされたアイテムの行IDです。 "いいえ、' Adapter#getItemId(int position) 'によって返される値はlongです。' CursorAdapter'は '_id'カラムを返すことによってそのメソッドを実装します。 – pskink

+0

行IDによって行/リスト項目の位置を意味します。 。 – samirk433

+0

'onItemLongClick' /' onItemClick'メソッドの 'position'と' id'の違いは何ですか? 'SimpleCursorAdapter'を使用すると、' id'は実際には '' row/list_item position "ではなくデータベースIDであることがわかります。 – pskink

関連する問題