【问题标题】:Android: OnItemClickListener returns the value of the last itemAndroid:OnItemClickListener 返回最后一项的值
【发布时间】:2015-10-25 19:20:33
【问题描述】:

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

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

【问题讨论】:

    标签: android listview onitemclicklistener onitemclick


    【解决方案1】:

    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
        }
    

    【讨论】:

    • 我理解 (1) 和 (3)。对于 (2) 在列表视图中我只想显示 fromT 并通过意图发送 toTdate,这就是原因!
    • 当你点击一个项目时你会发送你的数据,你需要从那个项目中获取整个数据,这就是为什么如果你把 fromTtoTdate在您的模型中。--- 对于(3):在onItemClick() 方法中,您拥有被点击项目的idposition,您可以使用它们从适配器数据中获取您的项目(模型)。
    【解决方案2】:

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

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

    【讨论】:

    • 你的答案一开始我并不清楚,但现在我明白了!谢谢
    猜你喜欢
    • 1970-01-01
    • 2021-07-12
    • 2021-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-14
    • 1970-01-01
    相关资源
    最近更新 更多