Listview

时间:2017-09-14 10:37:15

标签: android listview

我创建了一个listview,它从alertDialog editText获取输入并填充它。一切都运行正常但是在从行中删除项目并再次添加内容后,它还会添加以前删除的项目,这也不是一件好事。我知道我的问题的清晰画面,但很难知道该怎么做。

这是我在listView中添加列表的代码:

添加项目

{ items[items.length - 1] = value;

                List<String> newList = new LinkedList<String>(Arrays.asList(items));

                //Log.e("STRIING", newArray.toString());

                adapter = new MyListAdapter(RecyclerActivity.this, newList);
                mListView.setAdapter(adapter);

                String[] temp = new String[items.length + 1];

                for (int i = 0; i < items.length; i++)
                    temp[i] = items[i];

                items = temp;

                alertDialog.dismiss();
                adapter.notifyDataSetChanged();

                input.getText().clear();
            }

在这里,我必须通知已删除项目的更改,以获得所需的结果,但我不知道如何。

以下是我从列表视图中删除项目的地方:

mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(final AdapterView<?> adapterView, View view, int i, long l) {
            final String pos = mListView.getItemAtPosition(i).toString();
            Log.e("POS", pos);

            deleteDialog.setButton(DialogInterface.BUTTON_POSITIVE, "OK", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    adapter.remove(pos);
                    adapter.notifyDataSetChanged();
                }
            });
            deleteDialog.show();
        }
    });

以下是绑定数据的MyAdapter类:

public class MyListAdapter extends ArrayAdapter<String>{

    private final Context context;
    private final List<String> values;

    class ViewHolder {
        public TextView text;
    }


    public MyListAdapter(Context context, List<String> newList) {
        super(context, R.layout.row_item, newList);
        this.context = context;
        this.values = newList;
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        final View rowView = inflater.inflate(R.layout.row_item, parent, false);
        TextView textView = (TextView) rowView.findViewById(R.id.tvItem);
        textView.setText(values.get(position));
        return rowView;
    }


}

我的适配器是全局变量

我已尝试使用此功能,以便通过以下链接查看问题是否得到修复:

Deleting the items for the listview

代码现在看起来像这样。 :

newList.remove(pos);
adapter.notifyDataSetChanged();

newList只不过是 List&lt;&gt; String类型

请帮助我,因为我只浪费了很长时间。提前谢谢。

EDITS

我已经尝试在我的适配器类中添加它,但这给了我相同的结果:

public void removeItem(String position) {
        values.remove(position);
        notifyDataSetChanged();
    }

像这样调用此方法

adapter.removeItem(pos);

但结果相同

解决

我通过在Global中定义单个ArrayList并使用它来解决了这个问题。让我的工作变得轻松

在我的添加部分中,我已将其更改为

{ 
            newArrayList.add(value);
            adapter = new MyListAdapter(RecyclerActivity.this, newList);
            mListView.setAdapter(adapter);

            String[] temp = new String[items.length + 1];

            for (int i = 0; i < items.length; i++)
                temp[i] = items[i];

            items = temp;

            alertDialog.dismiss();
            adapter.notifyDataSetChanged();

            input.getText().clear();
        }

只需创建单个变量,因为数组可以顺利运行。

0 个答案:

没有答案