usniyo 2012-10-15 03: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-09 02:55
    关注

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

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

报告相同问题?

悬赏问题

  • ¥15 vc6.0中想运行代码的时候总是提示无法打开文件是怎么回事
  • ¥25 关于##爬虫##的问题,如何解决?:
  • ¥15 ZABBIX6.0L连接数据库报错,如何解决?(操作系统-centos)
  • ¥15 找一位技术过硬的游戏pj程序员
  • ¥15 matlab生成电测深三层曲线模型代码
  • ¥50 随机森林与房贷信用风险模型
  • ¥50 buildozer打包kivy app失败
  • ¥30 在vs2022里运行python代码
  • ¥15 不同尺寸货物如何寻找合适的包装箱型谱
  • ¥15 求解 yolo算法问题