setOnItemClickListener不使用notifyDataSetChanged更新

时间:2015-08-05 02:37:21

标签: android listview android-listview

我使用notifyDataSetChanged和我的自定义GridViewAdapter来更新listView但是当我点击更新的listView时,旧的链接仍然存在。我的onCreate方法中有以下ClickListener。

            listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view,
            int position, long id) {

                Intent intent = new Intent(getBaseContext(), SpiceList.class);
                intent.putExtra("INGREDIENTS_CALL", true);
                intent.putExtra("INGREDIENTS_SELECTED", position + 1);
                if (recipeCall) {
                    intent.putExtra("RECIPE_CALL", true);
                }
                startActivity(intent);
            }
    });

我已尝试在更新listView的按钮内复制此内容,但这不起作用。关于如何最好地更新我的监听器以反映我更改的listView的任何想法?

谢谢! :)

2 个答案:

答案 0 :(得分:1)

不确定我是否理解您的问题,但让我看看我是否可以尝试。您在点击列表视图时会更改列表视图视图吗?

您是否删除了适用于您的适配器的数组或列表中的任何元素?所以你删除一个项目,然后调用notifyDataSetChange()?或者您向数组添加项并调用notify方法?

答案 1 :(得分:0)

原来问题在于我检索SQL查询的方式。我正在使我的监听器的位置等于我正在检索的SQL条目的ID。因此,即使我的列表发生了更改,第1项仍然会提取ID为1的SQL项目。

当我在Android中设计查询时,我原本没想到会遇到这个问题。但是,现在我已将SQL查询链接到实际的项ID而不是侦听器位置。我的新听众现在是:

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view,
            int position, long id) {

                Intent intent = new Intent(getBaseContext(), SpiceList.class);
                intent.putExtra("INGREDIENTS_CALL", true);
                intent.putExtra("INGREDIENTS_SELECTED", Integer.parseInt(resultsID.get(position)));
                if (recipeCall) {
                    intent.putExtra("RECIPE_CALL", true);
                }
                startActivity(intent);
            }
    });

感谢您的帮助!