我有一个包含项目的列表视图。当我使用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;
}
答案 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();
}