0

我正在尝试在自定义列表视图中添加一个复选框,但不知道如何。

我有以下代码:

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

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;
}
}

列表.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>

如何在此列表中的项目中插入复选框?

4

3 回答 3

0

只需在布局 itens_lista.xml 中添加一个复选框。

只需添加一个复选框很容易。你想对 ti 做更多的事情吗?

于 2012-04-27T22:56:46.810 回答
0

CheckBox 视图添加到您的自定义行布局。

于 2012-04-27T22:57:03.487 回答
0

这将是列表中每一行的布局

<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" />

您的主列表活动布局将如下所示:

<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"
    />

您扩展 BaseAdapter getView 方法的类将如下所示:

public 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);
    }
}
于 2012-04-27T23:07:35.783 回答