我有一个单独的屏幕,ListView下方有一组按钮。当我滚动时,ListView上的条目以橙色亮起,因此我假设已选中。当我按下“删除”按钮时,我希望onClickListener删除当前选定的条目。但getSelectedItemPosition()总是给我-1。如果我不希望以这种方式使用GUI控件,请给我另一种获得相同结果的方法。
我甚至尝试设置列表视图的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();
}
});
}
}
答案 0 :(得分:0)
正如我在评论中已经提到的,我不知道你是否可以将OnFocusChangedListener附加到列表中的项目,但我确信这可能是一些方法,尽管它不会真正帮助你。
但也许下面的两个选项对你来说可能都很有趣。
实施项目上下文菜单,该菜单会在您长按项目时显示。在此上下文菜单中,您可以提供删除操作。您将在处理某种列表的许多不同Android应用上看到此行为。看看这个blog post。
让您列出能够选择多个项目。有关更多信息,请参阅this question。通过这种方式,您可以一次删除多个项目。
答案 1 :(得分:0)
我修改了你的代码..它的工作
public class Selectlistitem extends Activity {
int pos;
/** 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.widget34);
Button addButton = (Button) findViewById(R.id.btnadd);
Button deleteButton = (Button) findViewById(R.id.btnremove);
final EditText editText = (EditText) findViewById(R.id.txt1);
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();
}
});
myListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> list, View v, int pos, long id) {
aa.getItem(pos);
editText.setText(""+pos);
}
});
deleteButton.setOnClickListener(new
Button.OnClickListener() {
public void onClick(View v) {
// always returns -1 unfortunately ie nothing is ever selected
// int index = myListView.getCheckedItemPosition();
int index=pos;
if (index >= 0) {
todoItems.remove(index);
}
editText.setText(""+index);
aa.notifyDataSetChanged();
}
});
}
}