滚动时更改按钮按钮文本或edittext时自定义的ListView

詹姆士沃特·洛佩兹

我已经搜索了这个,但是没有得到确切的答案。

我在中有一个按钮ListView,单击该按钮时会显示一个警报对话框,用于选择日期,选择日期后,所选日期将是按钮的文本。该代码工作正常,但是当我上下滚动日期时,日期将被随机更改,这是我getView()的适配器方法代码当我键入任何正常作品也会发生这种情况,但是当我开始滚动时,值也会改变。EditTextEditText

这是我的获取视图方法

public View getView(int position, View convertView, ViewGroup parent) {
    final ViewHolder viewHolder;
    if(convertView == null){
        convertView = layoutInflater.inflate(R.layout.repeat_entry_listview,null);

        viewHolder = new ViewHolder();
        viewHolder.btnDate = (Button) convertView.findViewById(R.id.rpbtnDate);
        viewHolder.txtNotes  = (EditText) convertView.findViewById(R.id.rpNotes);
        convertView.setTag(viewHolder);
    }else{
        viewHolder = (ViewHolder) convertView.getTag();
    }


    RepeatEntryList repeatEntryList = listData.get(position);
    viewHolder.btnDate.setText(repeatEntryList.getDate());
    viewHolder.btnDate.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
          //EVEN IF I REMOVE THE CODE FOR SETTING THE BUTTON TEXT TO JUST LIKE THE BELOW CODE. SCROLLING ISSUES STILL PERSIST

          viewHolder.btnDate.setText("just sample date text");

            //**NOTE UPDATED**
            //MY EDITTEXT ALSO HAVE THE SAME BEHAVIOR
        }
    });
    viewHolder.txtNotes.setHint(contx.getResources().getString(R.string.placeholder_txt));
    return convertView;
}

注意:比方说,我有20个按键和20EditTextListView当我在所有内容中键入一些内容EditText并通过单击按钮更改按钮的文本时,然后上下滚动ListViewEditText和按钮的文本或值将更改或互换,有时消失。

关于我的问题,有人可以向我解释为什么ListView会这样,以及如何避免这种特定行为。

詹姆士沃特·洛佩兹

如果有人可能
遇到相同的问题,这就是我要解决的问题:1.首先,我在我的自定义Adapter类(即RepeatEntryListAdapter)中创建了一个变量,并将其命名为listData

public ArrayList<RepeatEntryList> listData;

2.我引用listData变量作为RepeatEntryList类的数组列表,这是我的getter和setter类,如下所示。

public RepeatEntryListAdapter(Context context,ArrayList<RepeatEntryList> listdata){
          this.listData = listdata;
            this.contx = context;
            mainActivity = (MainActivity) context;
            layoutInflater= LayoutInflater.from(context);
       }

3.在getview方法中,我为按钮创建了click事件。在click事件中,我实例化了getter类,然后使用我的getter类的实例化变量并使用settext来设置按钮的文本并设置lisData的日期。variable.and的重要部分是使用的ListData中,我使用的位置变量以设置的特定位置的值可变的ListData varaible这样。

 RepeatEntryList re = rListData;
 viewHolder.btnDate.setText('07-06-2015')//say the date selected is the string inside setText                          re.setDate(viewHolder.btnDate.getText().toString());//set Date is a setter method inside my RepeatEntryList class
 listData.set(position, re);//position variable should be final

4.这是最棘手的部分,它是解决我的自定义列表视图的滚动问题的部分,该问题是由edittext watcher在滚动时触发引起的我所做的是。

一种。我创建了一个实现TextWatcher这样的类

class EditTextWatcher implements TextWatcher{

        private int mPosition;
        private boolean mActive;

        void setPosition(int position){
            mPosition = position;
        }
        void setActive(boolean active){
            mActive = active;
        }
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {

        }

        @Override
        public void afterTextChanged(Editable s) {
            if(mActive){
                //rNotes.set(mPosition,s.toString());
                RepeatEntryList re = listData.get(mPosition);
                re.setNotes(s.toString());
                listData.set(mPosition,re);
            }
        }
    }

b。我还在静态类ViewHolder中为EditeTextWatcher创建了一个变量

 static class ViewHolder{
   public Button btnDate;
   public EditText txtNotes;
   public EditTextWatcher mWatcher;
}

C。在我的getview方法中,我创建了一个EditTextWatcher()的新实例,该实例也创建了一个新的textwatcher,并且不使用last事件,因为我创建了textwatcher的新实例

public View getView(final int position, View convertView, ViewGroup parent) {

        final ViewHolder viewHolder;

        final RepeatEntryList rListData = listData.get(position);

        if(convertView == null){
            convertView = layoutInflater.inflate(R.layout.repeat_entry_listview,null);

            viewHolder = new ViewHolder();
            viewHolder.btnDate = (Button) convertView.findViewById(R.id.rpbtnDate);
            viewHolder.mWatcher = new EditTextWatcher();
            viewHolder.txtNotes  = (EditText) convertView.findViewById(R.id.rpNotes);
            viewHolder.txtNotes.addTextChangedListener(viewHolder.mWatcher);

            convertView.setTag(viewHolder);
        }else{
            viewHolder = (ViewHolder) convertView.getTag();


        }

        viewHolder.btnDate.setText(rListData.getDate());

        viewHolder.mWatcher.setActive(false);
        viewHolder.txtNotes.setText(rListData.getNotes());
        viewHolder.mWatcher.setPosition(position);
        viewHolder.mWatcher.setActive(true);


      //here is the part of button click event i mention above (no 3.)
return convertView;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在自定义适配器中更改按钮单击时的按钮文本

ListView 自定义 ArrayAdapter - 从 Button OnClickListener 更改文本按钮

单击按钮时从“自定义EditText”字段获取数据

滚动时更改ListView Item中按钮的文本

自定义按钮内容时忽略按钮字体属性

滚动ListView时缺少按钮

自定义滚动:如何隐藏滚动条并创建一个点击时滚动的按钮?

单击按钮时从自定义适配器刷新 ListView

在android中滚动列表视图时,文本值会在自定义列表视图中更改?

滚动时的ListView自定义适配器错误

自定义Listview在滚动android时非常滞后

滚动时自定义ListView getView()方法nullPointerException

单击以在WooCommerce管理订单列表中显示文本时隐藏自定义操作按钮

自定义dojo小部件在单击按钮时不会清除文本字段

自定义按钮在选择时不会改变文本颜色

在 Android 中单击时更新包含在自定义通知中的按钮的文本

按钮和edittext的自定义UI

UITableview:单击自定义按钮时动态更改单元格高度

如何使用 jQuery 在单击按钮时将 CSS 自定义属性的值更改为 1?

为什么在点击(ios)时我的自定义附件按钮没有更改图像?

用自定义按钮反应Native FlatList,如何在单击时更改颜色?

在Swift OS X应用程序中单击按钮时更改“自定义视图”图形

CollapsingToolbarLayout在滚动时将自定义文本移到中心

通过按钮滚动自定义块

使用按钮自定义滚动

保存matplotlib图形时如何隐藏自定义按钮?

jqGrid 在自定义按钮单击时获取行数据

按下按钮时,此覆盖自定义CSS

挥舞自定义按钮时遇到麻烦