问题描述
下面的代码对我来说很好用,但是现在我不知道这是怎么回事! 每当我单击一个项目时,它都会将最后一个项目的值放到意图上! 任何想法?
protected void onPostExecute(List<HashMap<String, String>> result) {
customList=new ArrayList<>();
for (int i = 0; i < result.size(); i++) {
HashMap<String, String> appointement = result.get(i);
String fromT = appointement.get("fromT");
String toT = appointement.get("toT");
String date = appointement.get("date");
//int doctorid=Integer.parseInt(id.replaceAll("[\\D]",""));
addAvailableAppoint(fromT, toT, date);
}
updateListView();
}
}
private void addAvailableAppoint(final String fromT, final String toT, final String date) {
customList.add(new AvailabilityList(fromT));
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Log.i("items", "fromt " + fromT + "tot: " + toT);
Intent intent = new Intent(MakeAppointementActivity.this, AppointementActivity.class);
intent.putExtra("Doctor's name", DoctorName);
intent.putExtra("Doctor's infos", DoctorInfos);
intent.putExtra("fromT", fromT);
intent.putExtra("toT", toT);
intent.putExtra("date", date);
startActivity(intent);
}
});
}
// split new function for update listview
private void updateListView(){
ArrayAdapter adapter=new DoctorAvailabilityAdapter(MakeAppointementActivity.this,R.layout.list_items,customList);
adapter.notifyDataSetChanged();
lv.setAdapter(adapter);
1楼
每当我单击一个项目时,它都会将最后一个项目的值放到意图上!
您将忽略onItemClick()
所有参数。
如果您希望数据有所变化,则需要通过position
或id
在集合中找到合适的数据。
2楼
1)您无需为列表中的每个新项目设置点击监听器。 只需在for循环外设置一次即可。
2)尽量使用您的适配器模型类,它包含的所有数据: fromT
, toT
和date
。
因为如我所见,您的AvailabilityList
仅包含fromT
。
3)如@CommonsWare答案中所述,在onItemClick
尝试使用参数中的position
或id
查找合适的对象。
例如:
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
AvailabilityList item = (AvailabilityList)parent.getItem(position);
//Then from your item you can get the data: fromT , toT and date
}