목록보기에서 항목을 길게 누르면 상황 별 액션 막대가 나타납니다. 이제 내가 원하는 항목을 선택한 후 삭제 버튼을 누르면 선택한 항목이 삭제되지만 선택한 항목의 위치를 가져올 수 없습니다.작업 모드에서 선택된 항목의 위치 가져 오기
listViewMessages.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
listViewMessages.setMultiChoiceModeListener(new MultiChoiceModeListener() {
@Override
public void onItemCheckedStateChanged(ActionMode mode, int position,
long id, boolean checked) {
mode.setTitle(listViewMessages.getCheckedItemCount()+ " Selected");
}
@Override
public boolean onActionItemClicked(final ActionMode mode, MenuItem item) {
switch (item.getItemId()) {
case R.id.menu:
deleteScreenedMessageFromInbox();
mode.finish();
return true;
default:
return false;
}
}
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
// Inflate the menu for the CAB
MenuInflater inflater = mode.getMenuInflater();
inflater.inflate(R.menu.contextual, menu);
return true;
}
@Override
public void onDestroyActionMode(ActionMode mode) {
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return false;
}
});
내가이 메소드가 호출되어 삭제 버튼을 클릭하면 : 다중 선택 모드에 대한 나의 코드는
deleteScreenedMessageFromInbox();
그리고 난의 위치입니다이 방법에 인수를 전달해야 선택한 항목. 이 메소드의 코드는 다음과 같습니다.
public void deleteScreenedMessageFromInbox(Integer position) {
Integer id = smsIDs.get(position);
String deleteScreenedMessage = "delete from " + "sms" + " where " + "id" + " = " + id;
DBsms smsDb = new DBsms(this);
SQLiteDatabase dbw = smsDb.getWritableDatabase();
dbw.execSQL(deleteScreenedMessage);
dbw.close();
이 모든 해결책은 무엇입니까?
당신은 유지할 수있는'ArrayList를' 아이템의'MultiChoiceModeListener' 및'add' 외부에서 아이템을 삭제하거나 아이템을'remove'합니다 'boolean checked'가 참인지 거짓인지에 따라'onItemCheckedStateChanged' 내부의'ArrayList'로부터' 이 질문을 대답으로 확대 시키길 원한다면 알려주십시오. –
예 조금 혼란스러워서 샘플 코드를 제공해주십시오. –
기존 코드를 약간 수정하여 답변으로 게시했습니다. 확인해주십시오. –