【问题标题】:android: custom listview with checkbox, how to fill itandroid:带有复选框的自定义列表视图,如何填充它
【发布时间】:2013-07-05 13:01:04
【问题描述】:

我有一个由游标数据库填充的列表视图,并为该行使用自定义 xml。 一切正常,但我需要在我的行中选中或取消选中一个复选框,这取决于数据库中的值。 我不知道怎么做。

这是我的课:

    // inserisco gli elementi
    db.open();
    Cursor prendi_preventivi=db.prendi_preventivi();
    while(prendi_preventivi.moveToNext()){
        String nome_preventivo=prendi_preventivi.getString(prendi_preventivi.getColumnIndex("nome"));
        String data_preventivo=prendi_preventivi.getString(prendi_preventivi.getColumnIndex("data"));
        int approvato_preventivo=Integer.parseInt(prendi_preventivi.getString(prendi_preventivi.getColumnIndex("approvato")));
        preventiviLista.add(new Preventivo_per_lista(nome_preventivo,data_preventivo,approvato_preventivo));
    }
    db.close();
    ArrayList<HashMap<String,Object>> data=new ArrayList<HashMap<String,Object>>();
    for(int i=0;i<preventiviLista.size();i++){
        Preventivo_per_lista p=preventiviLista.get(i);
        HashMap<String,Object> preventivoMap=new HashMap<String, Object>();
        preventivoMap.put("nome", p.getNome());
        preventivoMap.put("data", p.getData());
        data.add(preventivoMap);
    }
    String[] from={"nome","data"};
    int[] to={R.id.nome_preventivo,R.id.data_preventivo};
    SimpleAdapter adapter=new SimpleAdapter(getApplicationContext(),data,R.layout.elemento_preventivo,from,to);
    lista_preventivi.setAdapter(adapter);
    lista_preventivi.setOnItemClickListener(new OnItemClickListener(){
        // click di elemento
        @Override
        public void onItemClick(AdapterView<?> parent, View view,int position, long _id){
            System.out.println(lista_preventivi.getItemAtPosition(position).toString());
        }
    });

这是我的 Preventivo_per_lista:

public class Preventivo_per_lista{
private String nome;
private String data;
private int approvato;
public Preventivo_per_lista(String name,String data,int approvato){
        super();
        this.nome=name;
        this.data=data;
        this.approvato=approvato;
}
public String getNome(){
        return nome;
}
public String getData(){
    return data;
}
public int getApprovato(){
    return approvato;
}
}

这是我的个人 xml 行

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="5dip"
android:orientation="horizontal"
android:id="@+id/elemento_preventivo"
android:weightSum="3">
<TextView android:id="@+id/nome_preventivo"
    android:layout_width="0dp"
    android:layout_height="fill_parent"
    android:gravity="center_vertical"
    android:textColor="#000000"
    android:layout_weight="1"
    android:textStyle="bold" />
<TextView android:id="@+id/data_preventivo"
    android:layout_width="0dp"
    android:layout_height="fill_parent"
    android:gravity="center_vertical"
    android:textColor="#000000"
    android:layout_weight="1"
    android:textStyle="bold" />
<CheckBox android:id="@+id/check_preventivo"
    android:layout_width="20dp"
    android:layout_height="20dp"
    android:textColor="#000000"
    android:layout_weight="1" />
</LinearLayout>

如果我的 approvato_preventivo 为 1,我需要选中复选框,如果为 0,我需要像往常一样保留它。

有人可以帮我吗?

【问题讨论】:

  • 嗨。 SimpleAdapter 之所以称为“简单”,是因为它非常简单。实际上你可以扩展它并“发明”一些东西,但这不是一个好主意。请根据您的需要使用 CursorAdapter developer.android.com/reference/android/widget/…
  • 不,不是这个问题
  • 不是的。 CursorAdapter 是您任务的基本方法。从架构和性能的角度来看,它要好得多。试试看。目前您正在发明一个“钩子,如何将 SimpleAdapter 用于它不适合的目的”。
  • 好的,但这不是我的问题的答案(已经解决)
  • 当然不是,这就是为什么我把它放在评论中;)

标签: android listview checkbox cursor adapter


【解决方案1】:

在您的适配器的 getView() 方法中,您需要像这样进行一些检查

if the "approvato_preventivo" is value type

if(approvato_preventivo==1)
{
    checkbox.setchecked(true);
}

else if(approvato_preventivo==0)
{
    checkbox.setchecked(false);
}

希望这会有所帮助

【讨论】:

  • farrukh,这可能对你有帮助:你写的所有东西都可以写成:checkbox.setChecked(approvato_preventivo==1);
【解决方案2】:

我自己解决了:

这是编辑过的部分:

    for(int i=0;i<preventiviLista.size();i++){
        Preventivo_per_lista p=preventiviLista.get(i);
        HashMap<String,Object> preventivoMap=new HashMap<String, Object>();
        preventivoMap.put("nome", p.getNome());
        preventivoMap.put("data", p.getData());
        if(p.getApprovato()==1){
            preventivoMap.put("approvato",true);
        }else{
            preventivoMap.put("approvato",false);
        }
        data.add(preventivoMap);
    }
    String[] from={"nome","data","approvato"};
    int[] to={R.id.nome_preventivo,R.id.data_preventivo,R.id.check_preventivo};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-23
    • 1970-01-01
    • 2015-03-01
    • 1970-01-01
    相关资源
    最近更新 更多