简体   繁体   English

如何在自定义列表视图上插入复选框

[英]How to insert checkbox on custom listview

I am trying to add a checkbox in a customized listview but don't know how. 我试图在自定义列表视图中添加一个复选框,但不知道如何。

I have the following codes: 我有以下代码:

ListObject.java ListObject.java

package br.com.eduvm.xurrascalc;

public class ListObject {

private String texto;
private int iconeRid;

    public ListObject() {

}

    public ListObject(String texto, int iconeRid) {

    this.texto = texto;
    this.iconeRid = iconeRid;
}

public int getIconeRid() {

    return iconeRid;
}

public void setIconeRid(int iconeRid) {

    this.iconeRid = iconeRid;
}

public String getTexto() {

    return texto;
}

public void setTexto(String texto) {

    this.texto = texto;
}
}

ListAdapter.java ListAdapter.java

package br.com.eduvm.xurrascalc;

import java.util.ArrayList;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.TextView;

public class ListAdapter extends BaseAdapter {

private LayoutInflater mInflater;
private ArrayList<ListObject> itens;

public ListAdapter(Context context, ArrayList<ListObject> itens) {

    // Itens que preencheram o listview
    this.itens = itens;

    // responsavel por pegar o Layout do item.
    mInflater = LayoutInflater.from(context);
}

public int getCount() {

    return itens.size();
}

public ListObject getItem(int position) {

    return itens.get(position);
}

public long getItemId(int position) {

    return position;
}

public View getView(int position, View view, ViewGroup parent) {

    ListObject item = itens.get(position);

    view = mInflater.inflate(R.layout.itens_lista, null);

    ((TextView) view.findViewById(R.id.text)).setText(item.getTexto());
    ((ImageView) view.findViewById(R.id.imagemview)).setImageResource(item.getIconeRid());

    return view;
}
}

List.xml List.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
        android:orientation="horizontal" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal"
        android:padding="5sp" >

        <ImageView
            android:id="@+id/imagemview"
            android:layout_width="wrap_content"
            android:layout_height="match_parent" />

        <TextView
            android:id="@+id/text"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginLeft="5sp"
            android:gravity="center_vertical"
            android:textColor="#FFF" />

    </LinearLayout>

</LinearLayout>

How could I do to insert a checkbox in the items in this list? 如何在此列表的项目中插入一个复选框?

Just add a checkbox to the layout itens_lista.xml. 只需在布局itens_lista.xml中添加一个复选框即可。

Just adding a checkbox is easy. 仅添加一个复选框很容易。 Do you want to do anything more to ti. 您还想做些什么?

复选框视图添加到您的自定义行布局。

This would be the layout for each individual row in your list 这将是列表中每一行的布局

<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >

<CheckBox 
    android:id="@+id/lstChkbox"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

<TextView 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" 
    android:id="@+id/lstText"
    android:textSize="30px"
    android:layout_weight="1" />

<ImageView 
    android:id="@+id/listImage"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content" />

You main list activity layout will look something like this: 您的主列表活动布局将如下所示:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >

<ListView
    android:id="@android:id/list"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"
    android:drawSelectorOnTop="false"
    android:choiceMode="multipleChoice"
    />

Your class which extends BaseAdapter getView method will somethings like this: 扩展BaseAdapter getView方法的类将是这样的:

public View getView(int position, View convertView, ViewGroup parent) { ViewHolder vHolder = null; 公共View getView(int position,View convertView,ViewGroup parent){ViewHolder vHolder = null;

    if (convertView != null)
        vHolder = (ViewHolder) convertView.getTag();                                // convertView is been recycled
    else {
        convertView = (View) mInflater.inflate(R.layout.list_item, null);           // Set content of new View with list_item.xml

        vHolder = new ViewHolder();
        vHolder.checkBox = ((CheckBox) convertView.findViewById(R.id.lstChkbox));   // Getting pointers
        vHolder.textView = ((TextView) convertView.findViewById(R.id.lstText));
        vHolder.imageView = ((ImageView) convertView.findViewById(R.id.listImage));

        vHolder.checkBox.setOnCheckedChangeListener(this);                          // Setting Listeners

        convertView.setTag(vHolder);
    }

    vHolder.checkBox.setId(position);                                               // This is part of the Adapter APi
    vHolder.textView.setId(position);                                               // Do not delete !!!
    vHolder.imageView.setId(position);


    if (mItems.get(position).getChecked()) {                                        // Setting parameters for the View from our mItems list
        vHolder.checkBox.setChecked(true);
    } else {
        vHolder.checkBox.setChecked(false);
    }

    vHolder.textView.setText(mItems.get(position).getText());
    vHolder.imageView.setImageDrawable(mItems.get(position).getmImage());

    return convertView;
}

public static class ViewHolder {
    CheckBox checkBox;
    TextView textView;
    ImageView imageView;
}

/*
 * Ok for this test but Toast are going to show every time the row comes into View
 */
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
    Log.d(TAG, "Checked");
    int position = buttonView.getId();

    if (isChecked) {
        mItems.get(position).setChecked(true);
        Toast.makeText(context, mItems.get(position).getText(), Toast.LENGTH_LONG).show();
    } else {
        mItems.get(buttonView.getId()).setChecked(false);
    }
}

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

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