Android layout 如何在ListView中获取已单击项的id?

Android layout 如何在ListView中获取已单击项的id?,android-layout,listview,Android Layout,Listview,我正在尝试使用上下文操作栏实现从数据库中删除。当我实现OnItemLongClickListener来检索单击项的id时,它返回了位置值。这是密码。 这是我的第一个问题,请原谅任何打字错误 公共类ChecklistActivity扩展了AppCompatActivity{ ListDbHelpermHelper; 私有长currentListItemIndex; 公共int ID; 私人俱乐部; 公共ArrayList任务列表; ListView lv; 私有静态最终字符串标记=“CheckLi

我正在尝试使用上下文操作栏实现从数据库中删除。当我实现OnItemLongClickListener来检索单击项的id时,它返回了位置值。这是密码。 这是我的第一个问题,请原谅任何打字错误

公共类ChecklistActivity扩展了AppCompatActivity{
ListDbHelpermHelper;
私有长currentListItemIndex;
公共int ID;
私人俱乐部;
公共ArrayList任务列表;
ListView lv;
私有静态最终字符串标记=“CheckListActivity”;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
mHelper=新的ListDBHelper(此);
setContentView(R.layout.activity_检查表);
mAdapter=newcladapter(这个,R.layout.activity\u checklist\u item,R.id.check\u textView,taskList);
lv=(ListView)findViewById(R.id.item\u ListView);
最后一个Bundle extras=getIntent().getExtras();
如果(附加值!=null){
ids=(int)extras.getLong(“key_id”);
}
updateUI((int)extras.getLong(“key_id”);
Button addButton=(Button)findViewById(R.id.addButton);
addButton.setOnClickListener(新视图.OnClickListener(){
公共void onClick(视图){
EditText addTask=(EditText)findViewById(R.id.addTask);
String list=String.valueOf(addTask.getText());
SQLiteDatabase db=mHelper.getWritableDatabase();
ContentValues=新的ContentValues();
value.put(ListContract.CheckListEntry.COLUMN\u NAME\u TITLE,list);
value.put(ListContract.CheckListEntry.COLUMN_LIST_KEY,(int)extras.getLong(“KEY_id”);
db.insertWithOnConflict(ListContract.CheckListEntry.TABLE_NAME,
无效的
价值观
SQLiteDatabase.CONFLICT\u REPLACE);
db.close();
addTask.setText(“”);
updateUI((int)extras.getLong(“key_id”);
}
});
lv.setOnItemLongClickListener(新的AdapterView.OnItemLongClickListener(){
@凌驾
公共布尔值长单击(AdapterView父项、视图、整型位置、长id){
currentListItemIndex=id;
lv.setItemChecked(位置,!mAdapter.isPositionChecked(位置));
返回false;
}
});}
lv.setChoiceMode(lv.CHOICE\u MODE\u MULTIPLE\u MODE);
lv.setMultichoiceModelListener(新的AbsListView.MultichoiceModelListener(){
私有整数nr=0;
@凌驾
public void onItemCheckedStateChanged(ActionMode模式、int位置、长id、布尔选中){
如果(选中){
nr++;
mAdapter.setNewSelection(位置,选中);
}否则{
nr--;
罢免选举(职位);
}
模式。设置标题(nr+“选定”);
}
@凌驾
公共布尔onCreateActionMode(ActionMode模式,菜单){
模式。设置标题(“删除项”);
nr=0;
mode.getMenuInflater().充气(右菜单、检查表、驾驶室菜单、菜单);
返回true;
}
@凌驾
公共布尔onPrepareActionMode(操作模式,菜单){
返回false;
}
@凌驾
公共布尔值onActionItemClicked(ActionMode模式,菜单项){
开关(item.getItemId()){
案例R.id.行动\删除\项目:
nr=0;
deleteRow((int)currentListItemIndex);
mAdapter.notifyDataSetChanged();
mode.finish();
返回true;
}
返回false;
}
@凌驾
公共void onDestroyActionMode(ActionMode模式){
}
});
}
public void updateUI(int-keyid){
ListDBHelper mHelper=新的ListDBHelper(此);
SQLiteDatabase db=mHelper.getReadableDatabase();
游标c=db.rawQuery(“选择CheckListEntry.*,CheckListEntry.\u id as _idfrom CheckListEntry WHERE”+
“CheckListEntry.ListKey==”+keyid+“;”,null);
ArrayList taskList=新建ArrayList();
while(c.moveToNext()){
int idx=c.getColumnIndex(ListContract.CheckListEntry.COLUMN\u NAME\u TITLE);
taskList.add(c.getString(idx));
Log.d(标记“cursorRead”+c.getString(idx));
}
mAdapter=新CLAdapter(此,
R.布局、活动检查表项目,
R.id.check_textView,
任务清单);
低压设置适配器(mAdapter);
}
公共void deleteRow(内部id){
ListDBHelper mHelper=新的ListDBHelper(此);
SQLiteDatabase db=mHelper.getWritableDatabase();
db.delete(ListContract.CheckListEntry.TABLE_NAME,“_id==”+id+“;”,null);
更新(ids);
}
}
尝试
view.getId()
获取单击视图的id。
id
参数是行id。请参阅

长按一下

布尔值长单击(AdapterView父对象, 视图视图, int位置, 长id)

单击并保持此视图中的项时要调用的回调方法。如果实现者需要访问与所选项目关联的数据,则可以调用getItemAtPosition(position)

参数

父AdapterView:发生单击的AblistView

查看视图:单击的AbsListView中的视图

位置int:视图在列表中的位置

id long:单击的项目的行id


您是否尝试过使用
setTag
方法设置标记?
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);
}
}