У меня есть один экран с банком кнопок ниже ListView. Записи в ListView загораются оранжевым цветом при прокрутке, поэтому я предполагаю, что они выбраны. Когда я затем нажимаю кнопку «Удалить», я хочу, чтобы onClickListener удалил текущую выбранную запись. Но getSelectedItemPosition() всегда дает мне -1. Если я не могу надеяться использовать элементы управления графическим интерфейсом таким образом, пожалуйста, дайте мне другой способ получить тот же результат.Как метод нажатия кнопки узнает, какой элемент выбран в ListView?
Я даже попробовал установить onClickListener в виде списка, чтобы сохранить индекс перед нажатием кнопки (в случае, если нажатие кнопки отменяет выбор записи), но даже это всегда -1 кажется.
Вот код (без модификации, которая не работала)
package com.bayley;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import java.util.ArrayList;
/**
*
* @author p0074564
*/
public class September extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
final ListView myListView = (ListView) findViewById(R.id.myListView);
Button addButton = (Button) findViewById(R.id.AddButton);
Button deleteButton = (Button) findViewById(R.id.DeleteButton);
final EditText editText = (EditText) findViewById(R.id.myEditText);
final ArrayList<String> todoItems = new ArrayList<String>();
todoItems.add("Monday");
todoItems.add("Tuesday");
todoItems.add("Wednesday");
final ArrayAdapter<String> aa =
new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, todoItems);
myListView.setAdapter(aa);
addButton.setOnClickListener(new
Button.OnClickListener() {
public void onClick(View v) {
todoItems.add(editText.getText().toString());
aa.notifyDataSetChanged();
}
});
deleteButton.setOnClickListener(new
Button.OnClickListener() {
public void onClick(View v) {
// always returns -1 unfortunately ie nothing is ever selected
int index = myListView.getSelectedItemPosition();
if (index >= 0) {
todoItems.remove(index);
}
aa.notifyDataSetChanged();
}
});
}
}
Вы уверены, что этот пункт действительно выбран. Я думаю, что это может быть только сфокусировано. – Flo
ОК, возможно, вы правы. Он подсвечивается оранжевым цветом. Я думал, это означает, что он был выбран. Возможно, я ошибаюсь в своем словаре. Подумайте об этом, возможно, его нужно дважды щелкнуть, чтобы его можно было выбрать, но затем щелчок на кнопке отменит его выбор. Есть ли способ узнать, какой предмет сосредоточен? Или если нажатие кнопки «Удалить» теряет фокус, возможно, я могу переопределить событие onFocus, чтобы сохранить фокусный индекс? –
Существует интерфейс OnFocusChangedListener, но я не знаю, можете ли вы прикрепить этот прослушиватель к элементам списка, но я думаю, что должно быть возможно каким-то образом. Но это может не помочь вам, потому что фокус будет потерян при нажатии кнопки. Для двух других способов справиться с вашей проблемой рассмотрите мой ответ ниже. – Flo