0
Well this happening something very crazy, in a list I have several items where I can change values, but when I increment these values and scroll the screen down and up the values are zeroed.
Another problem is when I go out and back to screen it Zera again all optional that had already filled out previously.
When I search the items and returns successfully mount the screen like this:
private void sucessoResposta(String resposta) {
RetornoComida retornoComida;
try
{
// Desserializa a resposta
retornoComida = JSONParser.parseComida(resposta);
// Conseguiu desserializar a resposta, verifica se houve sucesso
if (retornoComida.isSucesso())
{
txtTitulo.setText(retornoComida.getComida().getTituloComida());
txtIngredientes.setText(retornoComida.getComida().getComposicaoComida());
Picasso.with(this).load(retornoComida.getComida().getUrlImagem()).placeholder(R.drawable.ic_launcher).into(imgPrato);
comidaAdicionar = retornoComida.getComida();
comidaAdicionar.setMeia(retornoComida.getComida().isMeia());
comidaAdicionar.setMeiaMaior(retornoComida.getComida().isMeiaMaior());
tamanhos = retornoComida.getComida().getTamanhos();
adapter = new GenericAdapter<>(this, tamanhos,R.layout.item_tamanho);
adapter.setOnGetViewEvent(this);
lstItens.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
lstItens.setAdapter(adapter);
}
else
{
// Exibe a mensagem de erro
MessageUtil.showError(this,
ResourceUtil.getString(retornoComida.getMensagem()));
}
}
catch (Exception e)
{
// Falha ao desserializar objeto, exibe uma mensagem
MessageUtil.showError(this, R.string.erro_desconhecido);
return;
}
}
I have the option selects options that look like this:
@Click(R.id.btnEscolherOpcionais)
public void escolherOpcionais() {
if (tamanhoDaComida == null) {
MessageUtil.showError(this, R.string.erro_selecione_o_tamanho);
return;
}
Globales.getPedido().setCodRestaurante(restaurante.getCodigoRestaurante());
Globales.getPedido().setCodCliente(Integer.valueOf(PreferencesUtils.getString(this,PreferencesUtils.PREFERENCIA_CODIGO_CLIENTE)));
Intent intentEscolherOpcionais = new Intent(this, EscolherOpcionaisActivity_.class);
intentEscolherOpcionais.putExtra(EscolherOpcionaisActivity.COMIDA, comidaAdicionar);
intentEscolherOpcionais.putExtra(EscolherOpcionaisActivity.TAMANHO, tamanhoDaComida);
intentEscolherOpcionais.putExtra(EscolherOpcionaisActivity.RESTAURANTE, restaurante);
startActivityForResult(intentEscolherOpcionais, 0);
}
My Optionals Pick option is like this:
Method init();
@AfterViews
public void init() {
mToolbar = (Toolbar) findViewById(R.id.toolbar_actionbar);
setSupportActionBar(mToolbar);
getSupportActionBar().setDisplayShowHomeEnabled(true);
comida = (Comida) getIntent().getSerializableExtra(COMIDA);
tamanho = (Tamanho) getIntent().getSerializableExtra(TAMANHO);
restaurante = (Restaurante) getIntent().getSerializableExtra(RESTAURANTE);
configurarOpcionais();
}
Method adicionarOpcionais();
private void adicionarOpcional(Opcional opcional, Integer quantidade) {
OpcaoPedido opcao = new OpcaoPedido();
opcao.setCodRestauranteOpcao(opcional.getCodRestauranteOpcao());
opcao.setValorUnitario(opcional.getValorOpcao());
opcao.setQuantidade(quantidade);
opcao.setCdPedidoItemOpcao(opcional.getCdPedidoItemOpcao());
opcao.setVlTotal(opcional.getValorOpcao() * quantidade);
opcao.setCdPedidoItemOpcao(opcional.getCodRestauranteOpcao());
listaOpcionais.add(opcao);
}
To activity
complete is like this:
@EActivity(R.layout.activity_opcionais)
public class EscolherOpcionaisActivity extends ActionBarActivity implements
GenericAdapter.OnGetViewListener<Opcional> {
public static final String TAMANHO = "tamanho_obj";
public static final String RESTAURANTE = "resturante_obj";
public static final String COMIDA = "comida_obj";
Toolbar mToolbar;
@ViewById
ListView lstOpcionais;
@ViewById
TextView txtItensCarrinho;
GenericAdapter<Opcional> adapter;
List<Spinner> spinnersItens;
Tamanho tamanho;
Pedido pedido;
ItemPedido itemPedido;
Restaurante restaurante;
Comida comida;
@ViewById
LinearLayout emptyView;
String prato;
List<OpcaoPedido> listaOpcionais = new ArrayList<OpcaoPedido>();
@Click(R.id.lytCarrinho)
public void carrinho(){
Intent intentCarrinho = new Intent(this, CarrinhoActivity_.class);
startActivity(intentCarrinho);
}
@AfterViews
public void init() {
mToolbar = (Toolbar) findViewById(R.id.toolbar_actionbar);
setSupportActionBar(mToolbar);
getSupportActionBar().setDisplayShowHomeEnabled(true);
comida = (Comida) getIntent().getSerializableExtra(COMIDA);
tamanho = (Tamanho) getIntent().getSerializableExtra(TAMANHO);
restaurante = (Restaurante) getIntent().getSerializableExtra(RESTAURANTE);
configurarOpcionais();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_opcionais, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Pega todos os opcionais escolhidos
int views = lstOpcionais.getChildCount();
int i = 0;
if (views > 0) {
while (i < views) {
OpcionalHolder tOlderHolder = (OpcionalHolder) lstOpcionais.getChildAt(i)
.getTag();
Integer quantidade = Integer.valueOf(tOlderHolder.txtQuantidade.getText().toString());
if(quantidade > 0){
Opcional opcional = adapter.getItem(i);
adicionarOpcional(tOlderHolder.opcional, quantidade);
}
i++;
}
}
Intent data = new Intent();
data.putExtra("OPCIONAIS", (Serializable) listaOpcionais);
setResult(RESULT_OK, data);
finish();
return super.onOptionsItemSelected(item);
}
private void configurarOpcionais() {
adapter = new GenericAdapter<>(this, tamanho.getOpcionais(),
R.layout.item_opcional);
adapter.setOnGetViewEvent(this);
lstOpcionais.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
lstOpcionais.setAdapter(adapter);
lstOpcionais.setEmptyView(emptyView);
lstOpcionais.invalidate();
}
@Override
public void onGetView(final Opcional item, View view, boolean isNewView,
int position) {
try {
final OpcionalHolder viewHolder;
// Verifica se há uma nova view que foi inflada agora
if (isNewView) {
// Caso seja uma nova view, criamos o holder e encontramos todos
// elementos do layout
viewHolder = new OpcionalHolder();
viewHolder.txtOpcional = (TextView) view
.findViewById(R.id.txtOpcional);
viewHolder.txtQuantidade = (TextView) view
.findViewById(R.id.txtQuantidade);
viewHolder.btnRemover = (Button) view
.findViewById(R.id.btnRemover);
viewHolder.btnAdicionar = (Button) view
.findViewById(R.id.btnAdicionar);
// Guarda na tag
view.setTag(viewHolder);
} else {
// Caso seja uma view que esta sendo reutilizada, obtemos o
// cache do findview
viewHolder = (OpcionalHolder) view.getTag();
}
Money preco = new Money(BigDecimal.valueOf(item.getValorOpcao()));
viewHolder.txtOpcional.setText(item.getTituloOpcao() + " - "
+ preco.toString());
viewHolder.txtQuantidade.setText("0");
//viewHolder.btnRemover.setEnabled(false);
viewHolder.btnRemover.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// Decrementa a quantidade
int quantidade = Integer.valueOf(viewHolder.txtQuantidade
.getText().toString());
if (quantidade > 0) {
removerOpcional(item);
quantidade--;
viewHolder.txtQuantidade.setText(String
.valueOf(quantidade));
}
}
});
viewHolder.btnAdicionar.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// Incrementa a quantidade
int quantidade = Integer.valueOf(viewHolder.txtQuantidade
.getText().toString());
if (quantidade < 99) {
quantidade++;
viewHolder.txtQuantidade.setText(String
.valueOf(quantidade));
}
}
});
viewHolder.opcional = item;
} catch (Exception e) {
NegocioLog.inserir(Log.AVISO, e);
}
}
@Override
public void onResume(){
super.onResume();
}
private void adicionarOpcional(Opcional opcional, Integer quantidade) {
OpcaoPedido opcao = new OpcaoPedido();
opcao.setCodRestauranteOpcao(opcional.getCodRestauranteOpcao());
opcao.setValorUnitario(opcional.getValorOpcao());
opcao.setQuantidade(quantidade);
opcao.setCdPedidoItemOpcao(opcional.getCdPedidoItemOpcao());
opcao.setVlTotal(opcional.getValorOpcao() * quantidade);
opcao.setCdPedidoItemOpcao(opcional.getCodRestauranteOpcao());
listaOpcionais.add(opcao);
}
private void removerOpcional(Opcional item) {
}
}
I will try to add more details to the question as I discover.
The problem must be in the implementation of Adapter, ask the question.
– ramaral
just a minute ...
– Renan Rodrigues
@how do I get to my Adapter, because in the folder there is nothing
– Renan Rodrigues
Put the method
OnGetViewEvent()
, I think that’s the name– ramaral
I’ll look here
– Renan Rodrigues
I checked something different. It’s another code that is doing the listing I will add the answer
– Renan Rodrigues
updated the question
– Renan Rodrigues
This is the normal functioning of listview, it recreates the
view
. To deal with it you’ll have to create aCustom Adapter
– LMaker
Puts kkk, can help me ?
– Renan Rodrigues
@Luangabriel is not because of this no, I did the custom Adapter and nothing mudlu
– Renan Rodrigues
Voce validates in your
getView()
if theconvertView
is null?– LMaker
no, actually this was already done I’m just giving maintenance
– Renan Rodrigues
do this if validation (isNewView) {
– Renan Rodrigues
has more opinion @Luangabriel
– Renan Rodrigues
@Luangabriel my problem is in the method onGetView, until I solved the problem of 0, only that when I roll now the value I put in one iten goes to another
– Renan Rodrigues