当前位置: 代码迷 >> Android >> Android:OnItemClickListener返回最后一项的值
  详细解决方案

Android:OnItemClickListener返回最后一项的值

热度:24   发布时间:2023-08-04 12:16:30.0

下面的代码对我来说很好用,但是现在我不知道这是怎么回事! 每当我单击一个项目时,它都会将最后一个项目的值放到意图上! 任何想法?

 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);

每当我单击一个项目时,它都会将最后一个项目的值放到意图上!

您将忽略onItemClick()所有参数。 如果您希望数据有所变化,则需要通过positionid在集合中找到合适的数据。

1)您无需为列表中的每个新项目设置点击监听器。 只需在for循环外设置一次即可。

2)尽量使用您的适配器模型类,它包含的所有数据: fromTtoTdate 因为如我所见,您的AvailabilityList仅包含fromT

3)如@CommonsWare答案中所述,在onItemClick尝试使用参数中的positionid查找合适的对象。

例如:

    @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
    }
  相关解决方案