我如何知道何时检查了 android 应用程序中自定义列表视图中的所有复选框?我有一个自定义列表视图,我只想知道列表中的所有复选框何时被选中并向用户显示一条消息,对不起我的英语。
这是我的适配器的代码,但它不起作用......
public class MeuAdapter extends ArrayAdapter<LinhaItem>
{
private final List<LinhaItem> lista;
private final Activity contexto;
private final boolean[] pegos;
private double total = 0;
public MeuAdapter(Activity contexto, List<LinhaItem> lista)
{
super(contexto, R.layout.produtos, lista);
this.contexto = contexto;
this.lista = lista;
pegos = new boolean[this.lista.size()];
for(int i = 0; i < this.lista.size(); i++)
{
pegos[i] = false;
}
}
static class ViewHolder
{
protected TextView texto;
protected CheckBox checkbox;
protected EditText edit;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
View view = null;
final int posicao = position;
if(convertView == null)
{
LayoutInflater inflater = contexto.getLayoutInflater();
view = inflater.inflate(R.layout.produtos, null);
final ViewHolder viewHolder = new ViewHolder();
viewHolder.texto = (TextView) view.findViewById(R.id.txtDescricao);
viewHolder.checkbox = (CheckBox) view.findViewById(R.id.chkProduto);
viewHolder.edit = (EditText) view.findViewById(R.id.txtValor);
viewHolder.checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
{
LinhaItem elemento = (LinhaItem) viewHolder.checkbox.getTag();
elemento.setSelecionado(buttonView.isChecked());
if(elemento.Selecionado())
{
pegos[posicao] = true;
}
total += lista.get(posicao).getValor();
boolean cheia = true;
for(int i = 0; i < lista.size(); i++)
{
cheia = pegos[i];
//Toast.makeText(contexto, "pego["+i+"]"+pegos[i], 10000).show();
}
if(cheia)
{
Toast.makeText(contexto, "Compra finalizada, valor total: " + total, 10000).show();
}
}
});
view.setTag(viewHolder);
viewHolder.checkbox.setTag(lista.get(position));
}
else
{
view = convertView;
((ViewHolder) view.getTag()).checkbox.setTag(lista.get(position));
}
ViewHolder holder = (ViewHolder) view.getTag();
holder.texto.setText(lista.get(position).getTexto());
holder.checkbox.setChecked(lista.get(position).Selecionado());
holder.edit.setText(Double.toString((lista.get(position).getValor())));
return view;
}
}
我的新代码是:
package br.com.boitata.cadastroprodutos;
import java.util.List;
import java.util.ArrayList;
import android.os.Bundle;
import android.app.Activity;
import android.graphics.Color;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.*;
public class CadastroProdutosActivity extends Activity {
private Button btnInserir;
private EditText txtDescricao;
private EditText txtValor;
private TextView txtTotal;
private ListView lstProdutos;
private ProdutoBD bd;
private MeuAdapter adapter;
List<Produto> lista;
List<LinhaItem> linhas;
private double total = 0;
public void preencheLista(List<Produto> lp, ListView lista)
{
int tam = lp.size();
linhas = new ArrayList<LinhaItem>();
for(int i = 0; i < tam; i++)
{
Produto p = lp.get(i);
linhas.add(getLinha(p.getDescricao()));
}
adapter = new MeuAdapter(this, linhas);
//ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_1, android.R.id.text1, valores);
lista.setAdapter(adapter);
}
public LinhaItem getLinha(String texto)
{
return new LinhaItem(texto);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_cadastro_produtos);
btnInserir = (Button) findViewById(R.id.btnInserir);
txtDescricao = (EditText) findViewById(R.id.txtDescricao);
txtValor = (EditText) findViewById(R.id.txtValor);
txtTotal = (TextView) findViewById(R.id.txtTotal);
lstProdutos = (ListView) findViewById(R.id.lstProdutos);
lstProdutos.setBackgroundColor(Color.BLACK);
bd = new ProdutoBD(getApplicationContext());
lista = bd.listaProdutos();
preencheLista(lista, lstProdutos);
btnInserir.setOnClickListener(new OnClickListener() {
public void onClick(View v)
{
String checados = "";
for(int i = 0; i < lista.size(); i++)
{
checados += "pego[" + i + "]" + " " + pegos[i] + " - ";
}
Toast.makeText(getApplicationContext(), checados, 40000).show();
/* Produto p = new Produto();
p.setDescricao(txtDescricao.getText().toString());
p.setValor(Double.parseDouble(txtValor.getText().toString()));
bd.insere(p);
lista = bd.listaProdutos();
preencheLista(lista, lstProdutos);
int i = 0;
total = 0;
while(i < lista.size())
{
p = lista.get(i);
total += p.getValor();
i++;
}
txtTotal.setText("Total: " + Double.toString(total));*/
}
});
}
private boolean[] pegos;
private boolean[] passados;
public class MeuAdapter extends ArrayAdapter<LinhaItem>
{
private final List<LinhaItem> lista;
private final Activity contexto;
private double total = 0;
private int qtde = 0;
public MeuAdapter(Activity contexto, List<LinhaItem> lista)
{
super(contexto, R.layout.produtos, lista);
Toast.makeText(contexto, "Construindo", 10000).show();
this.contexto = contexto;
this.lista = lista;
qtde = this.lista.size();
pegos = new boolean[qtde];
passados = new boolean[qtde];
for(int i = 0; i < this.lista.size(); i++)
{
pegos[i] = false;
passados[i] = false;
}
}
public class ViewHolder
{
protected TextView texto;
protected CheckBox checkbox;
protected EditText edit;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
View view = null;
final int posicao = position;
if(convertView == null)
{
LayoutInflater inflater = contexto.getLayoutInflater();
view = inflater.inflate(R.layout.produtos, null);
final ViewHolder viewHolder = new ViewHolder();
viewHolder.texto = (TextView) view.findViewById(R.id.txtDescricao);
viewHolder.checkbox = (CheckBox) view.findViewById(R.id.chkProduto);
viewHolder.edit = (EditText) view.findViewById(R.id.txtValor);
viewHolder.checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
{
LinhaItem elemento = (LinhaItem) viewHolder.checkbox.getTag();
elemento.setSelecionado(buttonView.isChecked());
pegos[posicao] = isChecked;
if(elemento.Selecionado())
{
pegos[posicao] = true;
qtde--;
}
else if(qtde < lista.size() && passados[posicao])
{
qtde++;
}
total += lista.get(posicao).getValor();
boolean cheia = true;
for(int i = 0; i < lista.size(); i++)
{
if(!pegos[i])
{
cheia = false;
break;
}
//Toast.makeText(contexto, "pego["+i+"]"+pegos[i], 10000).show();
}
if(cheia || qtde == 0)
{
Toast.makeText(contexto, "Compra finalizada, valor total: " + total, 10000).show();
}
// Toast.makeText(contexto, "Quantidade não selecionada: " + qtde, 5000).show();
}
});
view.setTag(viewHolder);
viewHolder.checkbox.setTag(lista.get(position));
}
else
{
view = convertView;
((ViewHolder) view.getTag()).checkbox.setTag(lista.get(position));
}
ViewHolder holder = (ViewHolder) view.getTag();
holder.texto.setText(lista.get(position).getTexto());
holder.checkbox.setChecked(lista.get(position).Selecionado());
holder.edit.setText(Double.toString((lista.get(position).getValor())));
passados[posicao] = true;
return view;
}
}
}
这仅适用于当前出现的行...