Android:OnItemClickListener返回最后一项的值

时间:2015-10-25 19:20:34

标签: android listview onitemclicklistener onitemclick

下面的代码对我来说工作得很好,但现在我不知道它有什么问题!每当我点击一个项目时,它会将最后一项的值放入意图中!任何想法?

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

2 个答案:

答案 0 :(得分:0)

  

每当我点击某个项目时,它会将最后一项的值放入意图中!

您忽略了componentHandler.upgradeDom(); 的所有参数。如果您希望数据发生变化,则需要通过onItemClick()position在您的收藏集中找到相应的数据。

答案 1 :(得分:0)

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

2)尝试为包含所有数据的适配器使用Model类: 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
    }