我写了一个简单的程序,它将显示一个ArrayList,用户可以选择一个项目并用一个按钮删除它。
如果用户没有选择项目但继续点击删除按钮,则会删除ArrayList上的第一个项目。我该如何防止这种情况发生?删除按钮应仅在选择项目时运行,因此我需要找到一种方法来检查
int positionID;
ListView listview;
ArrayList<String> valuesArray = new ArrayList<String>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listview = (ListView) findViewById(R.id.listview);
valuesArray.add("a");
valuesArray.add("b");
valuesArray.add("c");
valuesArray.add("d");
valuesArray.add("e");
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(),
android.R.layout.simple_list_item_1, valuesArray);
listview.setAdapter(adapter);
listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapter, View view, int position, long id) {
positionID = (int) id;
}
});
}
public void onClickDelete(View v) {
//need to check if an item is selected. if so, run code below
valuesArray.remove(positionID);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_1, valuesArray);
listview.setAdapter(adapter);
}
答案 0 :(得分:2)
根据您提供的代码,可能会发生这种情况,因为positionID
的默认初始化值设置为0.要解决此问题,您可以初始化int positionID = -1
,然后在您的onClickDelete
方法,请检查以确保positionID
无效。像这样:
public void onClickDelete(View v) {
if (positionID < 0) return;
// continue your code here
}
顺便说一下,你还应该解决一些其他问题。您实际上应该直接与adapter
进行互动,因此您应该valuesArray.remove(positionID)
而不是adapter.remove(positionID)
。这将自动更新适配器并为您刷新ListView
,这样您就可以摆脱onClickDelete
方法的最后两行。
您可以在valuesArray
方法中将onCreate
作为局部变量,除非您计划在代码中的其他位置直接操作它。如果您选择这样做,则可以致电adapter.notifyDataSetChanged()
以使适配器刷新ListView
。