【问题标题】:How to insert checkbox on custom listview如何在自定义列表视图上插入复选框
【发布时间】:2012-04-28 22:27:52
【问题描述】:

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

我有以下代码:

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>

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

【问题讨论】:

    标签: java android listview checkbox


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      只需添加一个复选框很容易。你还想为ti做点什么吗?

      【讨论】:

        【解决方案3】:

        CheckBox View 添加到您的自定义行布局中。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-10-23
          • 2023-03-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多