簡體   English   中英

listview with checkbox單擊

[英]listview with checkbox single clickable

我有一個自定義arrayadapter和自定義布局的listivew,它有一個復選框。 我想讓這個列表視圖只啟用一個復選框,但我不知道我該怎么做。

這是我的適配器,但檢查和取消選中不正常。 請任何例外。

public class gremioAdapter extends ArrayAdapter<Gremio> {

Context context;
int layoutResourceId;
ArrayList<Gremio> data = null;
protected String comentarioAlEdiText;

public gremioAdapter(Context context, int layoutResourceId, ArrayList<Gremio> data)
{
    super(context, layoutResourceId, data);
    this.layoutResourceId = layoutResourceId;
    this.context = context;
    this.data = data;
}

public void updateDataSet(Gremio objetoGremioAnadir) {
    this.data.add(objetoGremioAnadir);
    notifyDataSetChanged();

}

public void updateDataSet(Gremio objetoGremioAnadir, int posicion) {
    this.data.add(posicion, objetoGremioAnadir);
    notifyDataSetChanged();

}

public void updateDataSet(String comentario, int posicion) {
    this.data.get(posicion).comentario = comentario;
    notifyDataSetChanged();

}
public void updateDataSet() {

    notifyDataSetChanged();

}

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


    if (row == null) {
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        row = inflater.inflate(layoutResourceId, parent, false);

        holder = new GremioHolder();
        holder.tvGremio = (TextView) row.findViewById(R.id.tvGremio);
        holder.cbActivo = (CheckBox) row.findViewById(R.id.cbGremioActivo);
        holder.tvComentario = (TextView) row.findViewById(R.id.tvComentario);

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

    Gremio gremioFinal = data.get(position);

    holder.tvGremio.setText(gremioFinal.literal);
    holder.tvComentario.setText(gremioFinal.comentario);

    if (data.get(position).getActivo().equals("1")) {
        holder.cbActivo.setChecked(true);
    }
    else {
        holder.cbActivo.setChecked(false);
    }

    holder.cbActivo.setOnClickListener(new OnClickListener()
    {


        @Override
        public void onClick(View v) {
            if (data.get(position).activo.equals("0"))
                h2.cbActivo.setChecked(true);
            if (data.get(position).activo.equals("1"))
                h2.cbActivo.setChecked(false);

        }
    });
    holder.cbActivo.setOnCheckedChangeListener(new OnCheckedChangeListener()
    {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

                if (!isChecked) {
                    for (int i = 0; i < data.size(); i++) {
                        data.get(i).activo = "0";
                    }
                    data.get(position).activo = "1";
                }
                if (isChecked) {
                    for (int i = 0; i < data.size(); i++) {
                        data.get(i).activo = "0";
                    }
                }

                notifyDataSetChanged();

            }
        });

        return row;
    }

    public class GremioHolder {
        TextView tvGremio;
        CheckBox cbActivo;
        TextView tvComentario;
    }
}

}

這應該照顧您的要求。 關於如何實現這一目標的非常好的教程。

http://tokudu.com/2010/android-checkable-linear-layout/

所以基本的基礎是,

  1. 擴展布局(線性/相對)並實現可檢查的界面。
  2. 在對布局進行充氣后,找出選擇了哪個子項並選中相應的復選框。 取消選中之前檢查的任何其他項目。
  3. 確保ListView的XML具有以下標記[android:choiceMode =“singleChoice”]

跳轉它對你有用...只需改變你的getview()方法。

@Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        View vi = convertView;
        final Holder holder;
        if (vi == null) {
            vi = inflater.inflate(R.layout.raw_customelabel_list, null);
            holder = new Holder();

            holder.txtname = (TextView) vi
                    .findViewById(R.id.raw_customlabel_txt_name);
            holder.checkbox = (CheckBox) vi
                    .findViewById(R.id.raw_customlabel_checkbox);
            vi.setTag(holder);

        } else {
            holder = (Holder) vi.getTag();
        }

        vi.setTag(holder);
        holder.txtname.setText(strarry[position]);

        holder.checkbox.setId(position);
        holder.checkbox.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                for (int i = 0; i < strarry.length; i++) {
                    if (v.getId() == i) {
                        checkarry[i] = true;
                        Log.v("check", ""+position);
                    } else {
                        checkarry[i] = false;
                    }
                }
                notifyDataSetChanged();
            }
        });

        if (checkarry[position]) {
            holder.checkbox.setChecked(true);
        } else {
            holder.checkbox.setChecked(false);
        }

        return vi;
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM