2017-04-09 25 views
0

コンテキスト・アクション・バーを使用してデータベースから削除を実装しようとしています。 OnItemLongClickListenerを実装してクリックされたアイテムのIDを取得すると、代わりに位置値が返されました。ここにコードがあります。 これが私の最初の質問ですので、クリックされたビューのIDを取得するview.getId()を試してみてくださいListViewでクリックしたアイテムのIDを取得する方法は?

public class ChecklistActivity extends AppCompatActivity{ 
ListDBHelper mHelper; 
private long currentListItemIndex; 
public int ids; 
private CLAdapter mAdapter; 
public ArrayList<String> taskList; 
ListView lv; 
private static final String TAG = "CheckListActivity"; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    mHelper=new ListDBHelper(this); 
    setContentView(R.layout.activity_checklist); 
    mAdapter=new CLAdapter(this,R.layout.activity_checklist_item,R.id.check_textView,taskList); 

    lv=(ListView) findViewById(R.id.item_listView); 
    final Bundle extras=getIntent().getExtras(); 
    if(extras!=null){ 
     ids=(int)extras.getLong("key_id"); 
    } 
    updateUI((int)extras.getLong("key_id")); 
    Button addButton =(Button)findViewById(R.id.addButton); 
    addButton.setOnClickListener(new View.OnClickListener(){ 
     public void onClick(View view){ 
      EditText addTask =(EditText)findViewById(R.id.addTask); 
      String list = String.valueOf(addTask.getText()); 
      SQLiteDatabase db = mHelper.getWritableDatabase(); 
      ContentValues values = new ContentValues(); 
      values.put(ListContract.CheckListEntry.COLUMN_NAME_TITLE, list); 
      values.put(ListContract.CheckListEntry.COLUMN_LIST_KEY,(int)extras.getLong("key_id")); 
      db.insertWithOnConflict(ListContract.CheckListEntry.TABLE_NAME, 
        null, 
        values, 
        SQLiteDatabase.CONFLICT_REPLACE); 
      db.close(); 
      addTask.setText(""); 
      updateUI((int)extras.getLong("key_id")); 

     } 
    }); 
    lv.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener(){ 
     @Override 
     public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { 
      currentListItemIndex=id; 
      lv.setItemChecked(position, !mAdapter.isPositionChecked(position)); 
      return false; 
     } 

    });} 
    lv.setChoiceMode(lv.CHOICE_MODE_MULTIPLE_MODAL); 
    lv.setMultiChoiceModeListener(new AbsListView.MultiChoiceModeListener() { 
     private int nr = 0; 
     @Override 
     public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) { 
      if (checked) { 
       nr++; 
       mAdapter.setNewSelection(position, checked); 
      } else { 
       nr--; 
       mAdapter.removeSelection(position); 
      } 
      mode.setTitle(nr + " selected"); 

     } 

     @Override 
     public boolean onCreateActionMode(ActionMode mode, Menu menu) { 
      mode.setTitle("Remove Item"); 
      nr = 0; 
      mode.getMenuInflater().inflate(R.menu.checklist_cab_menu,menu); 
      return true; 
     } 

     @Override 
     public boolean onPrepareActionMode(ActionMode mode, Menu menu) { 
      return false; 
     } 

     @Override 
     public boolean onActionItemClicked(ActionMode mode, MenuItem item) { 
      switch(item.getItemId()){ 
       case R.id.action_delete_item: 
        nr = 0; 

        deleteRow((int)currentListItemIndex); 
        mAdapter.notifyDataSetChanged(); 
        mode.finish(); 
        return true; 
      } 
      return false; 
     } 

     @Override 
     public void onDestroyActionMode(ActionMode mode) { 

     } 
    }); 
} 


public void updateUI(int keyid){ 

    ListDBHelper mHelper=new ListDBHelper(this); 
    SQLiteDatabase db= mHelper.getReadableDatabase(); 
    Cursor c= db.rawQuery("SELECT CheckListEntry.*,CheckListEntry._id as _id FROM CheckListEntry WHERE "+ 
      "CheckListEntry.ListKey == "+keyid+";",null); 
    ArrayList<String> taskList=new ArrayList<>(); 
    while(c.moveToNext()){ 
     int idx=c.getColumnIndex(ListContract.CheckListEntry.COLUMN_NAME_TITLE); 
     taskList.add(c.getString(idx)); 
     Log.d(TAG,"cursorRead"+c.getString(idx)); 
    } 
     mAdapter = new CLAdapter(this, 
       R.layout.activity_checklist_item, 
       R.id.check_textView, 
       taskList); 
     lv.setAdapter(mAdapter); 

    } 

public void deleteRow(int id){ 
    ListDBHelper mHelper = new ListDBHelper(this); 
    SQLiteDatabase db= mHelper.getWritableDatabase(); 
    db.delete(ListContract.CheckListEntry.TABLE_NAME,"_id =="+id+";",null); 
    updateUI(ids); 
} 
} 
+0

'setTag'メソッドを使ってタグを設定しようとしましたか? – MashukKhan

答えて

0

任意のタイプミスを言い訳してください。 id引数は行IDです。 AdapterView.OnItemLongClickListenerを参照してください。

onItemLongClick

ブールonItemLongClickこのビュー内の項目がクリックされたとき(AdapterView親、 ビュービュー、 int型の位置、 長いID)

コールバックメソッドが呼び出されると、開催されました。実装者は、選択した項目に関連付けられたデータにアクセスする必要がある場合は、getItemAtPosition(position)を呼び出すことができます。

パラメータ

親AdapterView:リスト内のビューの位置:

位置INTをクリックしたAbsListView内のビュー:クリックで

ビュービューが起こっAbsListView

id long:クリックされたアイテムの行ID

関連する問題