单击ListView中的任何项目时应用程序崩溃

时间:2017-10-06 01:17:58

标签: java android listview

我是Android工作室的初学者,我很难调试这个问题。

当我单击ListView中的任何项目时,应用程序崩溃,这里是OnItemClick的类。目标是将ListView从类别更改为类别内的项目。类别和项目存储在HashMap <String, String[]>中,因此传递cat.toString()的值应返回包含类别的字符串。最后使用myList(存储在函数外部)应返回包含这些项的字符串数组。但是,当我单击任何项​​目时,应用程序立即崩溃。谢谢你的帮助!

        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    //Choosen category
    TextView cat = (TextView) view;
    ArrayList<String> tempItems = new ArrayList<String>();
    //Toast.makeText(this, cat.getText().toString(),Toast.LENGTH_SHORT).show();
    listAdapter.clear();
    for(String val : myList.get(cat.getText().toString())){
        tempItems.add(val);
    }
    listAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,tempItems);
    listAdapter.notifyDataSetChanged();
}

变量

ListView myViewList;
Map<String, String[]> myList = new HashMap<String, String[]>();
ArrayAdapter<String> listAdapter;

填充ListView

    //Creating a list of all categories
    Set<String> myListKeys = myList.keySet();
    ArrayList<String> categories = new ArrayList<String>();
    for(String val : myListKeys){
        categories.add(val);
    }
    //String[] categories = myListKeys.toArray(new String[myListKeys.size()]);

    //Populating list
    myViewList = (ListView) findViewById(R.id.groceryList);
    listAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,categories);
    myViewList.setAdapter(listAdapter);
    myViewList.setOnItemClickListener(this);

1 个答案:

答案 0 :(得分:2)

您正在使用异常,因为您正在使用listAdapter.clear();尝试清除适配器内的List。但显然你已经传递了一个无法清除的数组(String[] categories)。您应该通过迭代将数组转换为 ArrayList (不仅仅是List)并将其传递给适配器。

您应该通过传递ArrayList

来创建适配器

您认为通过在旧适配器的onItemClick中创建新适配器,您做了什么?

在onItemClick中,不要创建新的适配器。相反,在清除适配器并创建临时ArrayList之后,将所有临时ArrayList添加到适配器。

listAdapter.addAll(tempItems);

另外,要从TextView获取文字,请使用cat.getText().toString();代替cat.toString();