Hello, how are you? Greetings to all who participate in this great community.
The issue is that I have a ListView
where I want to add the total of the fourth column, that is:
From my MainActivity
I add to a ArrayList
the class Bean
that contains val1, val2, val3, total. At the moment I want to show the total amount by clicking on a button
public class ListViewActivity extends AppCompatActivity {
private ItemListAdapter adapter;
TextView result;
ArrayList<Bean>arrayList=new ArrayList<Bean>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list_view);
Button btn = (Button) findViewById(R.id.btn);
result = (TextView) findViewById(R.id.tvResult);
for (int i = 0; i < 3; i++) {
Bean atomPayment=new Bean();
arrayList.add(atomPayment);
}
adapter = new ItemListAdapter(ListViewActivity.this, R.layout.row_item,arrayList);
ListView listView = (ListView)findViewById(R.id.listview);
listView.setAdapter(adapter);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ItemListAdapter.Holder x = new ItemListAdapter.Holder();
result.setText(String.valueOf(x.SumTotal));
}
});
}
public void itemDeleteListner(View v) {
Bean itemToRemove = (Bean)v.getTag();
adapter.remove(itemToRemove);
}
}
Well then I send it to the class ItemListAdapter
, already in the AfterTextChanged
when trying to make the sumtotal it does not show me the desired result.
public class ItemListAdapter extends ArrayAdapter<Bean> {
protected static final String LOG_TAG = ItemListAdapter.class.getSimpleName();
private ArrayList<Bean> items;
private int layoutResourceId;
private Context context;
public ItemListAdapter(Context context, int layoutResourceId, ArrayList<Bean> items)
{
super(context, layoutResourceId, items);
this.layoutResourceId = layoutResourceId;
this.context = context;
this.items = items;
}
@SuppressLint("ViewHolder")
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
View row = convertView;
Holder holder = null;
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
holder = new Holder();
holder.bean = items.get(position);
holder.ibDelete = (TextView)row.findViewById(R.id.ibDelete);
holder.ibDelete.setTag(holder.bean);
holder.etVal1 = (EditText)row.findViewById(R.id.edVal1);
holder.etVal2 = (EditText)row.findViewById(R.id.edValue2);
holder.etVal3 = (EditText)row.findViewById(R.id.edValue3);
holder.tvTotal=(TextView) row.findViewById(R.id.txtTotal);
setVal1TextChangeListener(holder);
setVal2TextChangeListener(holder);
setVal3TextListeners(holder);
row.setTag(holder);
setupItem(holder);
return row;
}
private void setupItem(Holder holder)
{
holder.etVal1.setText(String.valueOf(holder.bean.getVal1()));
holder.etVal2.setText(String.valueOf(holder.bean.getVal2()));
holder.etVal3.setText(String.valueOf(holder.bean.getVal3()));
holder.tvTotal.setText(String.valueOf(holder.bean.getTotal()));
}
public static class Holder
{
Bean bean;
EditText etVal1;
EditText etVal2;
EditText etVal3;
TextView tvTotal;
TextView ibDelete;
static double SumTotal;
}
private void setVal1TextChangeListener(final Holder holder)
{
holder.etVal1.addTextChangedListener(new TextWatcher()
{
@Override
public void onTextChanged(CharSequence s, int start, int before, int count)
{
if(s.toString().length()>0)
holder.bean.setVal1(Integer.parseInt(s.toString()));
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) { }
@Override
public void afterTextChanged(Editable s) { }
});
}
private void setVal2TextChangeListener(final Holder holder)
{
holder.etVal2.addTextChangedListener(new TextWatcher()
{
@Override
public void onTextChanged(CharSequence s, int start, int before, int count)
{
if(s.toString().length()>0)
holder.bean.setVal2(Integer.parseInt(s.toString()));
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) { }
@Override
public void afterTextChanged(Editable s) { }
});
}
private void setVal3TextListeners(final Holder holder)
{
holder.etVal3.addTextChangedListener(new TextWatcher()
{
@Override
public void onTextChanged(CharSequence s, int start, int before, int count)
{
try
{
if(s.toString().length()>0)
{
holder.bean.setVal3(Integer.parseInt(s.toString()));
}
}
catch (NumberFormatException e)
{
Log.e(LOG_TAG, "error reading double value: " + s.toString());
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after)
{
}
@Override
public void afterTextChanged(Editable s)
{
if(s.toString().length()>0)
{
holder.bean.setVal3(Integer.parseInt(s.toString()));
double val1=Double.parseDouble(holder.etVal1.getText().toString());
double val2=Double.parseDouble(holder.etVal2.getText().toString());
double val3=Double.parseDouble(holder.etVal3.getText().toString());
holder.bean.setTotal((val2*val3/900)*val1);
holder.tvTotal.setText(String.valueOf((val2*val3/900)*val1));
holder.SumTotal+=Double.parseDouble(holder.tvTotal.getText().toString());
// SumTotal=SumTotal+(val2*val3/900)*val1;
}
}
});
}
}
I tried to solve this, I could not, Help please.