Android: как удалить строку из ListView с кнопкой удаления в строке

Я знаю, что есть много потоков с более или менее одной темой, но ни одна из них не охватывает мою ситуацию:

Я заполняю свой ListView специальным CursorAdapter, используя мои собственные строки. У меня есть два состояния для ListView: первое состояние состоит только из текстов в строках; Второе состояние имеет кнопку удаления в каждой строке. Переключение между двумя состояниями – это кнопка в нижней части окна.

Я пытаюсь достичь: в первом состоянии, когда я нажимаю на строку, экран должен переключиться на другое представление. Во втором состоянии, когда я нажимаю кнопку «Удалить», выбранная строка должна быть удалена из базы данных, ListView должен быть заселен, и ничего не должно произойти, если я нажму на любую другую часть строки, кроме кнопки «Удалить».

Я знаю, как удалить элемент и повторно заполнить ListView, и я знаю, как переключиться на другое представление, когда я нажимаю на строку в первом состоянии; Но я не мог совместить эти два. Я использую следующий метод, чтобы получить идентификатор и позицию строки:

protected void onListItemClick(ListView l, View v, int position, long id) { super.onListItemClick(l, v, position, id); //Code goes in here either for deleting or switching into another view } 

Я попытался использовать некоторые операторы if, чтобы получить условие для щелчка кнопки удаления или для щелчка по строке, но это не сработало.

Первый вопрос очевиден: как я могу заставить его работать?

Второй вопрос: во втором состоянии, когда какая-либо часть строки нажата, кроме кнопки кнопки «Удалить», переключается на другое представление. Как я могу это предотвратить? Я попытался установить .setClickable, .setPressed, .setВыбранные атрибуты строки в false, но это не помогло.

Благодарим вас за ваши ответы заранее.

Во втором состоянии, когда какая-либо часть строки нажата, кроме кнопки кнопки «Удалить», переключается на другое представление. Как я могу это предотвратить?

Просто у вас есть слушатель для deleteButton

  @Override public View getView(int position, View convertView, ViewGroup parent) { View row = null; LayoutInflater inflater = getLayoutInflater(); row = inflater.inflate(R.layout.one_result_details_row, parent, false); // inflate other items here : Button deleteButton = (Button) row.findViewById(R.id.Details_Button01); deleteButton.setTag(position); deleteButton.setOnClickListener( new Button.OnClickListener() { @Override public void onClick(View v) { Integer index = (Integer) view.getTag(); items.remove(index.intValue()); notifyDataSetChanged(); } } ); 

В методе getView () вы помечаете ListItem для публикации

 deleteButton.setTag(position); 

Преобразовать getTag() в целое число

В OnClickListener() вы удаляете элемент

  items.remove(index.intValue()); 

Я думаю, что приведенный ниже код лучше для второго вопроса:

 Button ic_delete = (Button) row.findViewById(R.id.ib_delete); ic_delete.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View v) { // delete row from database notifyDataSetChanged(); } }); 
Intereting Posts