Android - EditTexts within ListView bound to Custom ArrayAdapter - keeping track of changes

后端 未结 1 1793
情书的邮戳
情书的邮戳 2020-12-11 04:04

I have an Android activity in which I have a ListView bound to a custom ArrayAdapter. Each row of the ListView has two EditText (numeric) fields.

The ArrayAdapter i

相关标签:
1条回答
  • 2020-12-11 04:52

    It looks like a custom ('ViewHolder') class was what I needed in order to keep the references between a EditText and its associated data object properly synchronised on each 'bind' of the data. Also, placing the event listener calls when the convertView object was null in the getView() method meant only one listener was added per EditText object.

    Thanks to http://www.vogella.de/articles/AndroidListView/article.html#listsactivity for pointing me in the right direction.

    public class CustomAdapter extends ArrayAdapter<DataItem> {
    private ArrayList<DataItem> items;
    private Activity Context;
    
    public CustomAdapter(Activity context, int textViewResourceId, ArrayList<DataItem> items) {
        super(context, textViewResourceId, items);
        this.items = items;
        this.Context = context; 
    }
    
    static class ViewHolder {
        protected EditText weight;
        protected EditText reps;
    
    }
    
     public View getView(int position, View convertView, ViewGroup parent) {
            View v = convertView;
    
            DataItem wed = items.get(position);
    
    
            if (v == null) {
                LayoutInflater inflator = Context.getLayoutInflater();
                v = inflator.inflate(R.layout.log_exercise_row, null);
                final ViewHolder viewHolder = new ViewHolder();
                viewHolder.text1 = (EditText) v.findViewById(R.id.text1);
                viewHolder.text2 = (EditText) v.findViewById(R.id.text2);
    
    
                viewHolder.text1.addTextChangedListener(new CustomTextWatcher(viewHolder, viewHolder.text1));
                viewHolder.text2.addTextChangedListener(new CustomTextWatcher(viewHolder, viewHolder.text2));
    
                v.setTag(viewHolder);
                viewHolder.text1.setTag(wed);
                viewHolder.text2.setTag(wed);
    
            }
    
            else
            {
                ViewHolder holder = (ViewHolder) v.getTag();
                holder.text1.setTag(wed);
                holder.text2.setTag(wed);   
            }
    
            ViewHolder holder = (ViewHolder) v.getTag();
    
            // set values
    
            if(wed.getWeight() != -1)
            {
                holder.text1.setText(wed.getWeight()+"");
            }
    
            else
            {
                holder.weight.setText("");
            }
    
            if(wed.getRepetitions() != -1)
            {
                holder.text2.setText(wed.getRepetitions()+"");
            }
    
            else
            {
                holder.reps.setText("");
            }
    
            return v;
    }
    
    0 讨论(0)
提交回复
热议问题