gpt4 book ai didi

android - 带有复选框的自定义 ListView

转载 作者:行者123 更新时间:2023-11-29 01:58:47 25 4
gpt4 key购买 nike

我如何知道何时选中了 Android 应用程序中自定义 ListView 中的所有复选框?我有一个自定义 ListView ,我只想知道何时选中列表中的所有复选框并向用户显示一条消息,对不起我的英语。

这是我的适配器的代码,但它不起作用...

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

}

}

这只适用于当前出现的行...

最佳答案

要测试您是否选中了列表行中最后一个未选中的 CheckBox,您可以使用多种方法。这是一个:

boolean allChecked = true;
for(int i = 0; i < lista.size(); i++) {
if (!pegos[i]) {
// it appears that one of our ChckBoxes is currently unchecked so
// we already know that not all CheckBoxes are checked
allChecked = false;
break;
}
if (allChecked) {
// if we get here and allChecked is true than all CheckBoxes are checked
Toast.makeText(contexto, "All checked!!", 10000).show();
}

为避免每次用户检查 CheckBox 时循环 bool 数组,您可以在适配器中有一个 int 字段,它最初是 bool 数组的大小。当用户选中 CheckBox 时,您会从该字段中减少 1,当用户取消选中 CheckBox 时,您会增加 1那个字段。在同一个监听器中,您测试该字段是否为 0,在这种情况下,所有 CheckBoxes 都被选中。

关于android - 带有复选框的自定义 ListView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13788049/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com