usniyo 2012-10-14 19:27 采纳率: 0%
浏览 3624
已采纳

请教一个关于android ListView的问题

在ListView的Item中有一个Switch控件,当Item过多屏幕装不下时,如果上下滑动使未显示的Item显示,这时开始和结尾的几个Item中的Switch控件会自动改变状态,并响应状态改变的事件。如果Item越多,会自动改变的Switch控件就越多。求解决方法,谢谢!

private class MAdapter extends CursorAdapter
{
    private Context context;
    private LayoutInflater mInflater;

    public MAdapter(Context context, Cursor c)
    {
        super(context, c, true);

        this.context = context;
        mInflater = LayoutInflater.from(context);
    }

    @Override
    public View newView(Context context, Cursor cursor, ViewGroup parent)
    {
        View v = mInflater.inflate(R.layout.main_task_list_item, null);
        return v;
    }

    @Override
    public void bindView(View view, Context context, Cursor cursor)
    {
        final MZTask task = new MZTask(cursor);

        // ic
        ImageView ic = (ImageView) view
                .findViewById(R.id.main_list_action_ic);
        ic.setImageResource(task.getIcId());

        // action name
        TextView actionName = (TextView) view
                .findViewById(R.id.main_list_action_name);
        actionName.setText(task.getActionName(context));

        // time
        TextView time = (TextView) view
                .findViewById(R.id.main_list_task_time);
        time.setText(task.getTimeString());

        // repeat
        TextView repeat = (TextView) view
                .findViewById(R.id.main_list_task_repeat);
        repeat.setText(task.getDayStringOfWeek(context));

        // switch view
        final Switch stch = (Switch) view
                .findViewById(R.id.main_list_task_switch);
        stch.setOnCheckedChangeListener(getCheckedChangeListener(task));
        stch.setChecked(task.state());

        // list more
        RelativeLayout icLayout = (RelativeLayout) view
                .findViewById(R.id.main_list_more);
        icLayout.setOnClickListener(new OnClickListener()
        {
            public void onClick(View v)
            {
                popUpMenu(task);
            }
        });

        // ..
        RelativeLayout itemLayout = (RelativeLayout) view
                .findViewById(R.id.main_list_layout_switch);
        itemLayout.setOnClickListener(new OnClickListener()
        {
            public void onClick(View v)
            {
                stch.setChecked(!stch.isChecked());
            }
        });

    }

    public OnCheckedChangeListener getCheckedChangeListener(
            final MZTask task)
    {
        return new OnCheckedChangeListener()
        {
            public void onCheckedChanged(CompoundButton button,
                    boolean change)
            {
                if (change)
                    task.startTask(context, dbAdapter);
                else
                    task.cancelTask(context, dbAdapter);
            }
        };
    }

}

展开全部

  • 写回答

1条回答 默认 最新

  • usniyo 2012-11-08 18:55
    关注

    由于重用导致的问题,只需在对switch进行操作之前重置状态监听器即可:

    setOnCheckedChangeListener(null);
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
编辑
预览

报告相同问题?

悬赏问题

  • ¥15 有人帮看看这个问题的嘛
  • ¥15 STM32悬赏求解答,ai不要来解答
  • ¥15 Mysql 一张表同时多人查询和插入怎么防止死锁
  • ¥20 centos6.7 安装libevent库.总是报错,如何解决?
  • ¥15 电脑买回,学校的有线网络总掉。
  • ¥20 关于普洛菲斯触摸屏与AB连接地址问题
  • ¥15 syri可视化不显示插入缺失
  • ¥30 运行软件卡死查看系统日志分析不出来
  • ¥15 C语言代码改正特征选择算法设计,贝叶斯决策,,设计分类器,远程操作代码修正一下
  • ¥15 String 类valuve指向的问题
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部