Criei uma uma ListView com checkBox e EditText, ficou bem legal, porém quando uso rolagem a opção selecionada aparece na proxima caixa abaixo do limite da tela, muito estranho. segue o codigo abaixo:
package app.infinity.android.com.myproject;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.EditText;
import java.util.ArrayList;
/**
-
Created by djavan on 08/10/16.
*/
public class AdapterListItens extends BaseAdapter {private ArrayList myItem;
private LayoutInflater context;public AdapterListItens(Context context, ArrayList itens) {
//Itens que preencheram o listview
this.myItem = itens;
//responsavel por pegar o Layout do item.
this.context = LayoutInflater.from(context);this.notifyDataSetChanged();
}
@Override
public int getCount() {
return myItem.size();
}@Override
public Object getItem(int position) {
return myItem.get(position);
}@Override
public long getItemId(int position) {
return myItem.get(position).getId();
}@Override
public View getView(final int position, View v, ViewGroup parent) {final ViewItemEditable viewEditable; if(v==null) { v = context.inflate(R.layout.item_list, parent, false); //final int index = (int)v.getTag(); viewEditable = new ViewItemEditable(); viewEditable.checkItem = (CheckBox) v.findViewById(R.id.checkItem); viewEditable.checkPrice = (CheckBox) v.findViewById(R.id.checkMoney); viewEditable.price = (EditText) v.findViewById(R.id.editMoney); v.setTag(viewEditable); viewEditable.checkItem.setTag(Integer.valueOf(position)); viewEditable.checkItem.setChecked(myItem.get(position).isSelected()); viewEditable.checkItem.setOnCheckedChangeListener(mListener); }else{ viewEditable = (ViewItemEditable) v.getTag(); } viewEditable.checkItem.setText("" + myItem.get(position).getName()); viewEditable.price.setText("" + myItem.get(position).getUnity()); viewEditable.checkPrice.setSelected(myItem.get(position).getInclide()); if (myItem != null && myItem.get(position) != null) { viewEditable.price.setText(""+myItem.get(position).getUnity()); } else { viewEditable.price.setText(null); } viewEditable.checkPrice.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (((CheckBox) v).isChecked()) { viewEditable.price.setEnabled(true); }else{ viewEditable.price.setEnabled(false); } } }); viewEditable.price.setOnFocusChangeListener(new View.OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { //When focus is lost save the entered value for later use if (!hasFocus) { String enteredPrice = ((EditText) v).getText().toString(); if(position<myItem.size()) { myItem.get(position).setPrice(Float.parseFloat(enteredPrice)); } } } }); return v;
}
OnCheckedChangeListener mListener = new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
myItem.get((int)buttonView.getTag()).setSelected(isChecked);
}
};class ViewItemEditable {
EditText price;
CheckBox checkItem;
CheckBox checkPrice;
}
}
Nao sei exatamente porque a lista apresentou esse problema, espero que tenham entendido.