Android 上下滚动时,ListView中的EditText会丢失值
我已经在ListView的编辑文本中输入了值,但是当我上下滚动时,这些值没有聚焦和丢失。请帮帮我。我是新手 我尝试了Android 上下滚动时,ListView中的EditText会丢失值,android,listview,scroll,android-edittext,Android,Listview,Scroll,Android Edittext,我已经在ListView的编辑文本中输入了值,但是当我上下滚动时,这些值没有聚焦和丢失。请帮帮我。我是新手 我尝试了TextWatcher,并将数据保存到array,但问题是ListView中返回的视图位置并不总是正确的,所以我从array中丢失了一些数据 这是我的密码 public class ListViewAdapter extends BaseAdapter { private Context context; private ArrayList<HashMap<String
TextWatcher
,并将数据保存到array
,但问题是ListView
中返回的视图位置并不总是正确的,所以我从array中丢失了一些数据
这是我的密码
public class ListViewAdapter extends BaseAdapter {
private Context context;
private ArrayList<HashMap<String, String>> data;
private LayoutInflater inflater;
private View itemView;
HashMap<String, String> Result = new HashMap<String, String>();
private Bitmap ImageCover;
private TextView bookname;
private TextView bookcode;
private TextView index;
private ImageView bookcover;
private String BookIDSend;
private String QtySend;
private EditText TxtStock;
private String[] valueList;
private boolean InputState;
public ListViewAdapter(Context context, ArrayList<HashMap<String, String>> arraylist, boolean state) {
this.context = context;
data = arraylist;
valueList = new String[data.size()];
InputState = state;
}
@Override
public int getCount() {
return data.size();
}
@Override
public Object getItem(int position) {
return position; }
@Override
public long getItemId(int position) {
return position; }
public View getView(final int position, View convertView, ViewGroup parent) {
if (convertView == null) {
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
itemView = inflater.inflate(R.layout.input_list_item, parent, false);
if ( ( position % 2 ) == 0 ) {
itemView.setBackgroundColor(Color.rgb(250,235,215));
} else {
itemView.setBackgroundColor(Color.rgb(255,235,205));
}
Result = data.get(position);
ClassFile FileName = new ClassFile();
String AppDirectory = FileName.GetAppDirectory(context);
String Directory = AppDirectory+"/cover/";
index = (TextView) itemView.findViewById(R.id.numb);
bookname = (TextView) itemView.findViewById(R.id.book_name);
bookcode = (TextView) itemView.findViewById(R.id.code_book_input);
bookcover = (ImageView) itemView.findViewById(R.id.imgCover);
TxtStock = (EditText) itemView.findViewById(R.id.EdtIsi);
TxtStock.setText(Result.get(InputActivity.INITIAL_STOCK));
final int pos = position;
valueList[pos] = Result.get(InputActivity.INITIAL_STOCK);
if (InputState){
TxtStock.setEnabled(true);
}else{
TxtStock.setEnabled(false);
}
TxtStock.addTextChangedListener(new TextWatcher() {
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
public void beforeTextChanged(CharSequence s, int start, int count,int after) {
}
public void afterTextChanged(Editable s) {
valueList[pos] = s.toString().trim();
}
});
bookname.setText(Result.get(InputActivity.BOOKNAME));
bookcode.setText(Result.get(InputActivity.BOOK_CODE));
ClassImage Procimg = new ClassImage();
ImageCover = Procimg.decodeSampledBitmapFromUri( Directory + Result.get(InputActivity.BOOKCOVER), 90, 120);
bookcover.setImageBitmap(ImageCover);
}else {
itemView = convertView;
}
int j = position+ 1;
index.setText("" + j);
return itemView;
}
公共类ListViewAdapter扩展了BaseAdapter{
私人语境;
私有数组列表数据;
私人充气机;
私有视图项目视图;
HashMap结果=新建HashMap();
私人位图图像封面;
私有文本视图书名;
私有文本视图图书代码;
私有文本视图索引;
私家书皮;
私有字符串booksend;
私有字符串QtySend;
私人编辑文本TxtStock;
私有字符串[]值列表;
私有布尔输入状态;
公共ListViewAdapter(上下文上下文、ArrayList ArrayList、布尔状态){
this.context=上下文;
数据=数组列表;
valueList=新字符串[data.size()];
输入状态=状态;
}
@凌驾
public int getCount(){
返回data.size();
}
@凌驾
公共对象getItem(int位置){
返回位置;}
@凌驾
公共长getItemId(int位置){
返回位置;}
公共视图getView(最终整数位置、视图转换视图、视图组父视图){
if(convertView==null){
充气器=(LayoutFlater)context.getSystemService(context.LAYOUT\u充气器\u服务);
itemView=充气机。充气(R.layout.input\u list\u项目,父项,false);
如果((位置%2)==0){
setBackgroundColor(Color.rgb(250235215));
}否则{
setBackgroundColor(Color.rgb(255235205));
}
结果=数据。获取(位置);
ClassFile FileName=新的ClassFile();
字符串AppDirectory=FileName.GetAppDirectory(上下文);
String Directory=AppDirectory+“/cover/”;
index=(TextView)itemView.findViewById(R.id.numb);
bookname=(TextView)itemView.findViewById(R.id.book\u name);
bookcode=(TextView)itemView.findViewById(R.id.code\u book\u输入);
bookcover=(ImageView)itemView.findViewById(R.id.imgCover);
TxtStock=(EditText)itemviewbyd(R.id.EdtIsi);
setText(Result.get(InputActivity.INITIAL_STOCK));
最终int pos=位置;
valueList[pos]=结果.get(输入活动.初始库存);
如果(输入状态){
TxtStock.setEnabled(true);
}否则{
TxtStock.setEnabled(false);
}
addTextChangedListener(新的TextWatcher(){
public void onTextChanged(字符序列、int start、int before、int count){
}
更改前文本之前的公共void(字符序列s、int start、int count、int after){
}
公共无效后文本已更改(可编辑){
valueList[pos]=s.toString().trim();
}
});
bookname.setText(Result.get(InputActivity.bookname));
bookcode.setText(Result.get(InputActivity.BOOK_CODE));
ClassImage Procimg=新ClassImage();
ImageCover=Procimg.decodeSampledBitmapFromUri(目录+结果.get(InputActivity.BOOKCOVER)),90120;
bookcover.setImageBitmap(ImageCover);
}否则{
itemView=convertView;
}
int j=位置+1;
index.setText(“+j”);
返回项目视图;
}
thx before滚动列表视图时,它将调用方法
getView()
,因此您需要将文本设置为EditText,因此您需要做的是:
TxtStock.setText(valueList[pos]);
首先在ListView中使用EditText不是一个好主意!但是如果必须这样做,您可以尝试一下
像这样更改代码
@Override
public Object getItem(int position) {
return data.get(position); }
在getView(..)方法中,您正在回收视图,这就是您丢失数据的原因
移动此行“TxtStock.setText(Result.get(InputActivity.INITIAL_STOCK));
在getView(..)内的if..else条件之外
希望这有帮助。convertView为null时只调用findViewById,当回收视图时,所有其他set方法都应该在if..else条件之外调用。谢谢!!;D我想指出一个错误,在方法getItem中,您必须返回数据[position]……
公共对象getItem(int position){return data[position];}
error先生。它说“表达式的类型必须是数组”@Ranjithreturn data.get(position);
data是数组列表。什么都没有发生,先生@iforessoh..我的错..我是指数据。get[position]…@iForests谢谢你的更正。。