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 にチェックボックスを追加するだけです。

チェックボックスを追加するだけで簡単です。ティにもっと何かしたいですか。

于 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 位置、View convertView、ViewGroup 親) { 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 に答える