还想记得 2016-07-12 02:13 采纳率: 0%
浏览 1027

Handler中处理了Json解析并更新了ListView,如何优化Item点击

class MediaHandler extends Handler {
public Map delstr;
@Override
public void handleMessage(Message message) {
switch (message.what) {
case 1:
try {
dataList = new ArrayList>();

                fileString = message.obj.toString();
                JSONObject object = JSONObject.fromObject(fileString);
                JSONArray jArray = object.getJSONArray("userFiles");

                for (int i = 0; i < jArray.size(); i++) {
                    Map<String, String> map = new HashMap<String, String>();
                    JSONObject jObject = jArray.getJSONObject(i);
                    map.put("fileName", jObject.get("fileName").toString());
                    map.put("zt", jObject.get("zt").toString());
                    map.put("name2", jObject.get("name2").toString());
                    dataList.add(map);
                }
                final MyAdapter adapter = new MyAdapter(
                        MediaFileActivity.this, dataList);
                lv.setAdapter(adapter);

                lv.setOnItemClickListener(new OnItemClickListener() {

                                            @Override
                    public void onItemClick(AdapterView<?> arg0, View arg1,
                            int position, long arg3) {
                        // TODO 自动生成的方法存根

                        ViewHolder holder = (ViewHolder) arg1.getTag();
                        holder.mtvcb.toggle();// 在每次获取点击的item时改变checkbox的状态
                        MyAdapter.isselected.put(position,
                                holder.mtvcb.isChecked()); // 同时修改map的值保存状态


                    }
                });


                cb.setOnCheckedChangeListener(new OnCheckedChangeListener() {

                    @Override
                    public void onCheckedChanged(CompoundButton arg0,
                            boolean arg1) {
                        // TODO 自动生成的方法存根
                        try {
                            if (arg1) {
                                for (int i = 0; i < dataList.size(); i++) {
                                    adapter.isselected.put(i, true);

                                }
                                Toast.makeText(MediaFileActivity.this,
                                        "选中了" + adapter.isselected.size(),
                                        2).show();
                                adapter.notifyDataSetChanged();// 注意这一句必须加上,否则checkbox无法正常更新状态
                            } else {
                                for (int i = 0; i < dataList.size(); i++) {
                                    adapter.isselected.put(i, false);

                                }
                                adapter.notifyDataSetChanged();// 注意这一句必须加上,否则checkbox无法正常更新状态
                            }
                        } catch (Exception e) {
                            // TODO 自动生成的 catch 块
                            e.printStackTrace();

                        }
                    }
                });
                btndelete.setOnClickListener(new OnClickListener() {

                    @Override
                    public void onClick(View arg0) {
                        // TODO 自动生成的方法存根

                    }
                });
            } catch (Exception e) {
                // TODO 自动生成的 catch 块
                e.printStackTrace();
            }

            break;

        case 2:


            break;
        }

    }
}

这是我Handler的一段代码,现在点击事件也再里面导致每一次点击都执行一边handler里面的所有步骤,导致有点卡,尤其是cb(checkbox)的全选点击事件,会卡几秒钟,哪位大神帮忙给个思路!
  • 写回答

1条回答 默认 最新

  • 新根 2016-07-12 10:19
    关注

    cb.setOnCheckedChangeListener()这个不用监控了,listview中item点击时已经改变了checkbox的状态,你若是弹出提示:
    放到lv.setOnItemClickListener()的监听器中:

    boolean isCheck= holder.mtvcb.isChecked();
    if( isCheck){
    Toast.makeText(MediaFileActivity.this,
    "选中了" + position,
    2).show();
    }
    adapter.notifyDataSetChanged();//提醒adpter更新数据

    评论

报告相同问题?

悬赏问题

  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥15 python天天向上类似问题,但没有清零
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 C#调用python代码(python带有库)
  • ¥15 矩阵加法的规则是两个矩阵中对应位置的数的绝对值进行加和
  • ¥15 活动选择题。最多可以参加几个项目?
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?