更新ListView无法正常工作

时间:2015-12-25 17:52:32

标签: android android-listview

我有一个包含项目的列表视图。当我使用AutoCompleteTextView进行搜索时,新项目将添加到列表视图中,但是当我单击onItemClick时,它将获得旧位置。我可以在新的列表视图中获得该职位吗?

public interface MyClickListener {
    public void click(SanPham sanPham);
}

@Override
public View onCreateView(LayoutInflater inflater,
                         @Nullable ViewGroup container,
                         @Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.my_fragment, null);
    sanPhams = new ArrayList<SanPham>();
    SanPham sanPham0 = new SanPham("Coca Cola", "Giá: 165.000/thùng",
            R.drawable.flag_coca, 1,
            "Bảo hành: 12 tháng. \r\n Nguồn gốc: Chính hãng. \r\n Hãng sản xuất:" +
                    "Coca Cola. \r\n Dung Tích(ml)/Lon: 330. \r\n Xuất xứ: Việt Nam");
    SanPham sanPham1 = new SanPham("Pepsi", "Giá: 165.000/thùng",
            R.drawable.flag_pepsi, 1,
            "Bảo hành: 12 tháng. \r\n Nguồn gốc: Chính hãng. \r\n Hãng sản xuất:" +
                    "pepsi. \r\n Dung Tích(ml)/Lon: 330. \r\n Xuất xứ: Việt Nam");
    SanPham sanPham2 = new SanPham("suafami", "Giá: 165.000/thùng",
            R.drawable.flag_suafami, 2,
            "Bảo hành: 12 tháng. \r\n Nguồn gốc: Chính hãng. \r\n Hãng sản xuất:" +
                    "suafami. \r\n Dung Tích(ml)/Lon: 330. \r\n Xuất xứ: Việt Nam");
    SanPham sanPham3 = new SanPham("7up", "Giá: 165.000/thùng",
            R.drawable.flag_7up, 1,
            "Bảo hành: 12 tháng. \r\n Nguồn gốc: Chính hãng. \r\n Hãng sản xuất:" +
                    "7up. \r\n Dung Tích(ml)/Lon: 330. \r\n Xuất xứ: Việt Nam");
    SanPham sanPham4 = new SanPham("number1", "Giá: 165.000/thùng",
            R.drawable.flag_number1, 1,
            "Bảo hành: 12 tháng. \r\n Nguồn gốc: Chính hãng. \r\n Hãng sản xuất:" +
                    "number1. \r\n Dung Tích(ml)/Lon: 330. \r\n Xuất xứ: Việt Nam");
    SanPham sanPham5 = new SanPham("nuocepdau", "Giá: 165.000/thùng",
            R.drawable.flag_nuocepdau, 2,
            "Bảo hành: 12 tháng. \r\n Nguồn gốc: Chính hãng. \r\n Hãng sản xuất:" +
                    "nuocepdau. \r\n Dung Tích(ml)/Lon: 330. \r\n Xuất xứ: Việt Nam");
    SanPham sanPham6 = new SanPham("sting", "Giá: 165.000/thùng",
            R.drawable.flag_sting, 1,
            "Bảo hành: 12 tháng. \r\n Nguồn gốc: Chính hãng. \r\n Hãng sản xuất:" +
                    "sting. \r\n Dung Tích(ml)/Lon: 330. \r\n Xuất xứ: Việt Nam");
    SanPham sanPham7 = new SanPham("traxanh0do", "Giá: 165.000/thùng",
            R.drawable.flag_traxanh0do, 1,
            "Bảo hành: 12 tháng. \r\n Nguồn gốc: Chính hãng. \r\n Hãng sản xuất:" +
                    "traxanh0do. \r\n Dung Tích(ml)/Lon: 330. \r\n Xuất xứ: Việt Nam");

    sanPhams.add(sanPham0);
    sanPhams.add(sanPham1);
    sanPhams.add(sanPham2);
    sanPhams.add(sanPham3);
    sanPhams.add(sanPham4);
    sanPhams.add(sanPham5);
    sanPhams.add(sanPham6);
    sanPhams.add(sanPham7);

    listView = (ListView) view.findViewById(R.id.listView1);
    adapterListView =new AdapterListView(getActivity(), sanPhams);
    listView.setAdapter(adapterListView);

    AutoCompleteTextView autoCompleteTextView = (AutoCompleteTextView) view.findViewById(R.id.AutoCompleteTextView1);
    String[] data = new String[]{"Coca Cola", "Pepsi", "suafami", "7up", "number1", "nuocepdau", "sting", "traxanh0do"};
    ArrayAdapter<String> aa = new ArrayAdapter<String>(getActivity(), android.R.layout.select_dialog_item, data);
    autoCompleteTextView.setAdapter(aa);
    autoCompleteTextView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            ArrayList<SanPham> rs = new ArrayList<>();
            for (int i = 0; i < sanPhams.size(); i++) {
                if (sanPhams.get(i).getName() == (((TextView) view).getText())) {
                    rs.add(sanPhams.get(i));
                }
            }

            listView.setAdapter(new AdapterListView(getActivity(), rs));

        }
    });
    final ArrayAdapter<String> arrayAdapterSpiner = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_item, new String[]{"Tất cả",
            "Nước Có Ga", "Nước Không Có Ga"});
    Spinner spinner = (Spinner) view.findViewById(R.id.Spiner1);
    spinner.setAdapter(arrayAdapterSpiner);
    spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            ArrayList<SanPham> rs = new ArrayList<>();
            if (position == 0)
                rs = sanPhams;
            else {
                for (int i = 0; i < sanPhams.size(); i++) {
                    if (sanPhams.get(i).getType() == position) {
                        rs.add(sanPhams.get(i));

                    }
                }
            }
            listView.setAdapter(new AdapterListView(getActivity(), rs));
        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {
        }
    });
    textView = (TextView) view.findViewById(R.id.textView1);
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

            if (textView == null) {
                clickListener = (MyClickListener) getActivity();
                clickListener.click(sanPhams.get(position));
            } else {
                textView.setText(sanPhams.get(position).getDescription() + "");
            }
        }
    });

    return view;

}

1 个答案:

答案 0 :(得分:0)

好的,先

你是以错误的方式比较这两个字符串 if (sanPhams.get(i).getName() == (((TextView) view).getText())),你应该将其更改为if (sanPhams.get(i).getName().equals((TextView) view).getText()),因为这就是你比较字符串的方式 Java

其次

我希望您更改Dataset的{​​{1}}(内容),而不是一起构建新的内容,您可以将引用保留到{ {1}}然后用新数据重新填充它。

以下是如何实现这一目标:

AdapterListView

现在,根据您的AdapterListView实施情况,我猜您有一些 //Define your adapter variable private AdapterListView myAdapterListView = null; ... //Your Adapter initialization listView = (ListView) view.findViewById(R.id.listView1); adapterListView =new AdapterListView(getActivity(), sanPhams); listView.setAdapter(adapterListView); ... ,其中您将数据添加到构造函数中,就像在此处AdapterListView一样,这样您就可以ArrayList中名为populate的方法,会在现有适配器中添加新的new AdapterListView(getActivity(), rs)

AdapterListView

然后你打电话 ArrayList

而不是

//Add this method in your adapter public void populate(ArrayList newData){ //your adapter arrayList this.YOUR_ADAPTER_ARRAYLSIT = newData; //this will refresh your adapter with the new data this.notifyDataSetChanged(); }