notifyDatasetChanged()没有在适配器上工作

时间:2017-04-07 04:47:53

标签: android listview notifydatasetchanged

我创建了一个包含四个文本视图的自定义列表...此列表中的数据通过一个带有ok按钮的对话框保存。当我添加数据时,它会保存在列表中(到目前为止工作正常)。当我添加下一个元素时,所有行都获得与最后一个相同的值... notifyDatasetChanged()也无法正常工作......我错了吗?...这是我的代码......

ok.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                   String val =  editquantity.getText().toString();
                    valq1 = Integer.parseInt(val);
                    ListView l;
                    l = (ListView) v.findViewById(R.id.order_listview);
                    myAdapter adapter = new myAdapter(getActivity(), row);
                    l.setAdapter(adapter);
                    row.add("");
                    adapter.notifyDataSetChanged();
                    builder.dismiss();

                }
            });

            builder.setView(dialog);
            builder.show();

4 个答案:

答案 0 :(得分:2)

每次单击“确定”时都创建了新适配器。将适配器代码放在onclick方法之外:

ListView l = (ListView) v.findViewById(R.id.order_listview);
myAdapter adapter = new myAdapter(getActivity(), row);
l.setAdapter(adapter);

ok.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
               String val =  editquantity.getText().toString();
                valq1 = Integer.parseInt(val);

                row.add(""); //add new item to the list
                adapter.notifyDataSetChanged(); //notify adapter
                builder.dismiss();

            }
        });

        builder.setView(dialog);
        builder.show();

答案 1 :(得分:1)

您需要使用addAll()方法添加新值,其余旧值在arraylist中相同。

row.addAll("test");

答案 2 :(得分:0)

为什么要将行添加为空白。 其次,您已在适配器中设置行而不定义它。 请提供更多详细信息,因为我无法理解行已声明的位置。 来到类似的价值问题。 您需要更新行数组,因为它已在适配器上设置。

答案 3 :(得分:0)

您需要改变三件事  1.在onCreate()之外声明ListView对象  2.在onCreate()之外声明你的适配器对象     
现在这个下面这行的初始化只需要在onCreate()中初始化一次。当你添加新项目时,你不需要一次又一次地初始化它。所以在你的onCreate()下面写行。

myAdapter adapter = new myAdapter(getActivity(), row);

当您添加新项目时,您只需要在名为row on the okoch按钮的arraylist中添加该项目,然后调用adapter.notifyDataSetChanged();它将正常工作。