Android Multiple EditText fields in a ListAdapter

后端 未结 1 1043
半阙折子戏
半阙折子戏 2021-01-28 09:54

I have a screen (see picture) that is populated by a GridView using a custom extension of BaseAdapter.

When the user enters some text into the EditText fields, the text

相关标签:
1条回答
  • 2021-01-28 10:02

    I would again preface this, as in the other answer, by saying I wouldn't implement it this way. You're doing scary stuff. Carrying lots of references around. However, I think this should help:

    Map<EditText, MyTextWatcher> watchers = new HashMap<EditText, MyTextWatcher>();
    
    public View getView(int position, View convertView, ViewGroup parent)
    {
        View MyView = convertView;
        if (MyView == null)
        {
            LayoutInflater li = getLayoutInflater();
            MyView = li.inflate(R.layout.shape, null);
        }
    
        EditText textbox = (EditText) MyView.findViewById(R.id.shape_edittext);
    
        textbox.setText(strings[position]);
        MyTextWatcher myTextWatcher = watchers.get(textbox);
    
        if(myTextWatcher == null)
        {
            myTextWatcher = new MyTextWatcher(position, textbox);
            watchers.put(textbox, myTextWatcher);
        }
    
        myTextWatcher.setIndex(position);
    
        ImageView image = (ImageView) MyView.findViewById(R.id.shape_image);
        image.setBackgroundResource(images[position]);
    
        TextView text = (TextView) MyView.findViewById(R.id.shape_text);
        text.setText("Seq:");
    
        return MyView;
    }
    

    The problem here is that you created the TextWatcher, added it to an EditText, but then kept a reference to it in a list by position, so the references between EditText and the TextWatcher were broken.

    This solution assumes that 'equals' for EditText will do an object instance compare and not a value compare. If that is NOT the case, you'd need to keep a reference to all EditText instances, and do an '==' compare to each and find a match.

    I think there are safer ways to do this, but give it a shot.

    0 讨论(0)
提交回复
热议问题