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