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;
}
}
}
これは、現在表示されている行に対してのみ機能します...