检查是否选中了setOnItemClickListener

时间:2017-10-19 03:06:43

标签: java android arraylist onclicklistener

我写了一个简单的程序,它将显示一个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);
}

1 个答案:

答案 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