代码之家  ›  专栏  ›  技术社区  ›  Potion

动态添加项的android回收器视图seterror

  •  0
  • Potion  · 技术社区  · 8 年前

    我有一个回收视图,它有一个文本观察附加到它。任何编辑都会自动保存输入。我想做的是检查文本手表时出错。不幸的是,我不确定如何在TextWatcher中使用seterror()方法。我似乎找不到合适的方法来引用viewholder项。有什么办法可以让这一切变得简单吗?我知道gettag和settag,但是我找不到在这个场景中正确使用它的示例。

    下面注释的代码块“//check if empty for word”仅在我将其放在onBindViewHolder的末尾时才起作用。这只在运行时有效,只检查初始值。每次为特定的edittext元素更改文本时,我都希望调用此命令。

    有什么方法可以使这成为一个简单的解决方案吗?

    package edu.gatech.seclass.sdpvocabquiz.adapters;
    
    import android.support.v7.widget.RecyclerView;
    import android.text.Editable;
    import android.text.TextWatcher;
    import android.util.Log;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.EditText;
    import android.widget.TextView;
    
    import java.util.HashMap;
    import java.util.List;
    import edu.gatech.seclass.sdpvocabquiz.R;
    import edu.gatech.seclass.sdpvocabquiz.data.WordPair;
    
    public class WordPairAdapter extends 
    RecyclerView.Adapter<WordPairAdapter.WordPairHolder> {
    
        private List<WordPair> wordPairs;
        private boolean addButtonClicked;
    
        public WordPairAdapter(List<WordPair> wordPairs) {
            this.wordPairs = wordPairs;
        }
    
        public void setFocusToLastAdded(){
            addButtonClicked = true;
        }
    
        @Override
        public int getItemCount() {
            return wordPairs.size();
        }
    
        @Override
        public void onBindViewHolder(WordPairHolder wordPairHolder, int i) {
            // Attaching an event listener to the dynamically created adapter item
            // Update our textfields every time we bind a new element via a textListener
            // Updating textEdit fields that are dynamically generated with adapters
            // Source: https://stackoverflow.com/questions/31844373/saving-edittext-content-in-recyclerview
    
            WordPair wp = wordPairs.get(i);
    
            wordPairHolder.wordListener.updatePosition(i);
            wordPairHolder.definitionListener.updatePosition(i);
    
            wordPairHolder.wordEditText.setText(wp.getWord());
            wordPairHolder.definitionEditText.setText(wp.getCorrectDefinition());
    
            wordPairHolder.wordEditText.setTag("word" + i);
            wordPairHolder.definitionEditText.setTag("def" + i);
    
        }
    
        @Override
        public WordPairHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
            View itemView = LayoutInflater.
                    from(viewGroup.getContext()).
                    inflate(R.layout.cardview_word_pair, viewGroup, false);
            WordPairHolder wordPairHolder = new WordPairHolder(itemView, new AttachedWordEditTextListener(), new DefinitionEditTextListener());
            return wordPairHolder;
        }
    
        public static class WordPairHolder extends RecyclerView.ViewHolder {
    
            AttachedWordEditTextListener wordListener;
            DefinitionEditTextListener definitionListener;
            protected EditText wordEditText;
            protected EditText definitionEditText;
    
            public WordPairHolder(View v, AttachedWordEditTextListener wordListener, DefinitionEditTextListener definitionListener) {
                super(v);
    
                // Reference our elements
                this.wordEditText =  (EditText) v.findViewById(R.id.quizWordPairWord);
                this.definitionEditText = (EditText)  v.findViewById(R.id.quizWordPairDefinition);
    
                // Reference and Attach our text listener
                this.wordListener = wordListener;
                this.definitionListener = definitionListener;
                this.wordEditText.addTextChangedListener(wordListener);
                this.definitionEditText.addTextChangedListener(definitionListener);
    
            }
        }
    
        private class AttachedWordEditTextListener implements TextWatcher{
            private int position;
    
            public void updatePosition(int position){
                this.position = position;
            }
    
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
    
            }
    
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                WordPair wp = wordPairs.get(position);
                wp.setWord(s.toString());
                //String string = s.toString();
    
                //check if empty for word
    //        if(wp.getWord().trim().length() == 0 || wp.getWord().isEmpty()){
    //            wordPairHolder.wordEditText.setError("Cannot be left blank");
    //        }
    //
    //        // check if empty for word definition
    //        if(wp.getCorrectDefinition().trim().length() == 0 || wp.getCorrectDefinition().isEmpty()){
    //            wordPairHolder.definitionEditText.setError("Cannot be left blank");
    //        }
    //
    //        // Set focus to latest item if added
    //        if(i == getItemCount()-1){
    //            Log.i("WordPairAdapter","Item count: " + i + "getItemCount: " + String.valueOf(getItemCount()));
    //            wordPairHolder.wordEditText.requestFocus();
    //        }
    
            }
    
            @Override
            public void afterTextChanged(Editable s) {
    
            }
        }
    
        private class DefinitionEditTextListener implements TextWatcher{
            private int position;
    
            public void updatePosition(int position){
                this.position = position;
            }
    
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
    
            }
    
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                WordPair wp = wordPairs.get(position);
                wp.setCorrectDefinition(s.toString());
            }
    
            @Override
            public void afterTextChanged(Editable s) {
    
            }
        }
    }
    
    0 回复  |  直到 8 年前