我已经搜索了这个,但是没有得到确切的答案。
我在中有一个按钮ListView
,单击该按钮时会显示一个警报对话框,用于选择日期,选择日期后,所选日期将是按钮的文本。该代码工作正常,但是当我上下滚动日期时,日期将被随机更改,这是我getView()
的适配器方法代码。当我键入任何正常的作品时也会发生这种情况,但是当我开始滚动时,值也会改变。EditText
EditText
这是我的获取视图方法
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个按键和20EditText
内ListView
。当我在所有内容中键入一些内容EditText
并通过单击按钮更改按钮的文本时,然后上下滚动ListView
,EditText
和按钮的文本或值将更改或互换,有时消失。
关于我的问题,有人可以向我解释为什么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] 删除。
我来说两句