下面的代码对我来说工作得很好,但现在我不知道它出了什么问题!每当我点击一个道具时,它都会将最后一个道具的值放到intent中!任何想法?
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)您不需要为列表中的每个新项目设置单击侦听器。只需在for循环外设置一次即可。
2)尝试为包含所有数据的适配器使用Model类: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
}
每当我点击一个项目,它把最后一个项目的值到意图!
您忽略了onItemClick()
的所有参数。如果您希望数据变化,则需要通过position
或id
在集合中找到适当的数据。