Edittext调用afterTextChanged仅在用户修改它而不是程序

时间:2016-02-04 06:06:57

标签: android listview android-edittext android-textwatcher android-touch-event

我是Android新手并且在使用此方法时遇到了一些问题,并且想知道是否有人可以帮助解决此问题。

问题:我有一个带有EditText框的数组适配器,用户可以在ListView中修改它。但是,我只想要用户修改,而不是我片段中的程序。我该怎么做?(请继续阅读完整的上下文)这里的问题是,当用户在listView中修改此EditText时,适配器将调用片段,片段将操纵这些数字。然后它将修改列表视图中的其他EditText。

对我来说,问题是,当用户修改或点击列表视图中的EditText时,使用afterTextChanged()的值将被传递给片段,但是因为我做了一些修改并修改了它EditMxt以编程方式在列表视图中的不同位置,也为列表视图中的其他EditText视图调用afterTextChanged事件。我只想让用户改变。

要解决这个问题,我尝试使用这个onTouchListener()。只是想知道这是否正确。

Class myArrayAdapter extends ArrayAdapter<Obj>{

    //private defines and static viewHolder class

    public myArrayAdapter (Context c, ArrayList<Obj> obj, MyFragment myFrag
    {
        //this....
    }

    @Override
    public View get View (int position, View convertView, ViewGroup parent){
    obj posObj = getItem(position);
    if (convertView == NULL){

        //inflate (ObjlistView)
        viewHolder.userInputValue = (EditText) covertView.findViewById(R.id.view_userInput);

       //user onTouch
                 final int pos= position;
        viewHolder.userInputValue.setOnTouchListener(new View.OnTouchListener(){
            @Override
            public boolean onTouch(View view, MotionEvent event){
                EditText UserInput= (EditText)view;
                //this is a custom Text watcher for passing editText Value to Fragment. SO I want this to be only called when user modifies it. Not when the Fragment modifies it and calling notifyDataSetChanged
                UserInput.addTextChangedListener(new CustomTextWatcher(pos, myFrag));
                return false;
            }
        });

        convertView.setTag(viewHolder)
     }else {//...}

     viewHolder.userInputValue.setText(posObj.getValue());

    } 

}

ListVie的XML

<EditText
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:inputType="number"     // another annoying issue when i user clicks the editText it will show the number pad then will go to the keyboard and every time there is a delete or a new entry this keyboard change will happen. But that is not for this question. 
    android:id="@+id/view_userInput"

在片段中,这是我再次修改edittext的方式

Obj myTempUserobj ;
for (int i = 0; i< userObj.size(); i++){
    myTempUserobj = userObj.get(i);
    //modify the field in the object
    userObj.set(i,myTempUserobj) 
    myAdapter.notifyDataSetChanged();
}

感谢您的帮助!

0 个答案:

没有答案