我有一个ListView下面有一组按钮的屏幕。当我滚动时,ListView上的条目以橙色点亮,因此我假设已选中。当我然后按下“删除”按钮我想onClickListener删除当前选定的条目。但getSelectedItemPosition()总是给我-1。如果我不希望以这种方式使用GUI控件,请给我另一种获得相同结果的方式。按钮点击方法如何找出在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 2010-09-09 08:40:35
好的,你可能是对的。它以橙色突出显示。我认为这意味着它被选中了。也许我在我的词汇中错了。想想看,也许它需要被双击才能被选中,但是然后点击一下按钮就不会再选择它。有没有办法找出哪个项目的重点?或者,如果点击删除按钮失去焦点,也许我可以重写一个onFocus事件来保存焦点索引? – 2010-09-09 10:38:24
有一个OnFocusChangedListener接口,但是我不知道你是否可以将这个监听器附加到列表项中,但我认为它应该是可能的。但它可能无法帮助你,因为单击按钮时焦点将丢失。对于其他两种处理问题的方法,请看下面的答案。 – Flo 2010-09-09 11:20:14