繁体   English   中英

如何在“自定义”列表视图中为开关设置侦听器?

[英]How do I set up a listener to a switch in my Custom listview?

我想为列表视图中每个项目中的每个开关设置一个单独的侦听器。 我该如何做到这一点?

我的异步任务中调用的方法是setQueues:

    private void setQueues(final JSONObject[] qInfo) 
{
    queues = new QueueItem[qInfo.length]; // QueueItem consists of a string(label) and a boolean(value)

    for(int i = 0; i < qInfo.length; i++)
    {
        queues[i] = new QueueItem();
        //final int ii = i;

        // Formatting the queue title
        String name = qInfo[i].optString("name").replace("-", " ");
        name = name.replace("_", " ");
        name = name.replace("ipinion", "");
        name = name.replace("  ", " ");
        name = capitalizeFirstLetters(name);
        queues[i].label = name;

        try {
            if(qInfo[i].getString("active").contains("1"))
            {
                Log.d("QBox", "Queue: Checkbox " + i + " : Checked TRUE");
                queues[i].value = true;
            }
            else
            {
                Log.d("QBox", "Queue Checkbox " + i + " : Checked FALSE");  
                queues[i].value = false;
            }
        } 
        catch (JSONException e) 
        {
            e.printStackTrace();
        }

    }

    lv.setAdapter(new QueueAdapter(getActivity(), 
            R.layout.queues_items, queues));
}

任何帮助是极大的赞赏。 我觉得我缺少一些非常明显的东西。

编辑:从QueueAdapter的getView方法:

    @Override
public View getView(int position, View convertView, ViewGroup parent) {
    View row = convertView;
    QueueHolder holder = null;

    if(row == null)
    {
        LayoutInflater inflater = ((Activity)context).getLayoutInflater();
        row = inflater.inflate(layoutResourceId, parent, false);

        holder = new QueueHolder();
        holder.queueswitch = (Switch)row.findViewById(R.id.queues_item_switch);
        holder.txtLabel = (TextView)row.findViewById(R.id.queues_item_text);

        row.setTag(holder);
    }
    else
    {
    holder = (QueueHolder)row.getTag();
    }

    QueueItem queue = data[position];
    holder.txtLabel.setText(queue.label);
    holder.queueswitch.setChecked(queue.value);
    // Is this where you would set up your listener?    

    return row;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View row = convertView;
    QueueHolder holder = null;

    if(row == null)
    {
        LayoutInflater inflater = ((Activity)context).getLayoutInflater();
        row = inflater.inflate(layoutResourceId, parent, false);
        holder = new QueueHolder();
        holder.queueswitch = (Switch)row.findViewById(R.id.queues_item_switch);
        /* TRY PUTTING IT HERE */
        holder.txtLabel = (TextView)row.findViewById(R.id.queues_item_text);

        row.setTag(holder);
    }
    else
    {
    holder = (QueueHolder)row.getTag();
    }

    QueueItem queue = data[position];
    holder.txtLabel.setText(queue.label);
    holder.queueswitch.setChecked(queue.value);
    holder.queueswitch.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        //DO SOMETHING
        }
    });

    return row;
}

这样就可以了! 我不确定,但是尝试将其放置在“ / *尝试在此处放置* /”的位置,我不确定是否可以使用,但会更好,因为onClickListener的初始化仅发生一次...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM