在的EditText列表视图重复值视图、列表、EditText

由网友(擒拿美人心)分享简介:我有三个textviews和列表中的一个编辑文本。当我在EditText上输入的任何值,同样的值也被复制到其他的EditText。我累了实现既onFocusChangedListener和onTextChanged,但问题是在这两种情况下相同的。I have three textviews and one edit...

我有三个textviews和列表中的一个编辑文本。当我在EditText上输入的任何值,同样的值也被复制到其他的EditText。我累了实现既onFocusChangedListener和onTextChanged,但问题是在这两种情况下相同的。

I have three textviews and one edit text in the list. when I entered any value in the edittext, the same value is also copied in the other edittext. I tired implementing with both onFocusChangedListener and onTextChanged but the problem is same in both the cases.

public class ProductListAdapter extends BaseAdapter {

Context context;
public ArrayList<Products> prodList;
private static LayoutInflater inflater = null;
public ProductsList productListActivity;

public ProductListAdapter(Context context,ArrayList<Products> prodList) {
    this.context = context;
    this.prodList = prodList;
    inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    Log.e("In adapter", "yes");
}

@Override
public int getCount() {
    return prodList.size();
}

@Override
public Products getItem(int position) {
     return prodList.get(position); }

@Override
public long getItemId(int position) {
    return position;
}
@Override
public View getView( final int position, View convertView, ViewGroup parent) {
      Log.i(" in prodlist adapter","View holder");
      final   ViewHolder holder;
      if (convertView == null) {
            convertView = inflater.inflate(R.layout.productslistviewadapter, parent, false);

            holder = new ViewHolder();
            holder.tvdrCode = (TextView) convertView.findViewById(R.id.tvname);
            holder.tvDrName = (TextView) convertView.findViewById(R.id.tvprodpack);
            holder.tvterrcode= (TextView) convertView.findViewById(R.id.textView3);
            holder.caption = (EditText)convertView.findViewById(R.id.editText1);
            convertView.setTag(holder);

        } 
     else {
            holder = (ViewHolder) convertView.getTag();
        }

        Products p = prodList.get(position);
        holder.tvdrCode.setText(p.getDocCode());
        holder.tvDrName.setText(p.getDocName());
        holder.tvterrcode.setText(p.getAdr());

        //holder.caption.setText(prodList.get(position).caption);
       /* holder.caption.setId(position);

        holder.caption.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            public void onFocusChange(View v, boolean hasFocus) {
               if (!hasFocus) {
                    final int position = v.getId();
                    final EditText Caption = (EditText) v;  
                //  prodList.get(position)= Caption.getText().toString();
                    String d = prodList.get(position).getDocCode();
                    Log.e("dr code",d);
                }
            }
        }); */          

        holder.caption.setTag(position);
        // holder.caption.setText(ProdList.get(position).toString());
        int tag_position=(Integer) holder.caption.getTag();
        holder.caption.setId(tag_position); 

        holder.caption.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence s, int start,int before, int count) {
                  //2nd method  String d = planArraylist.get(position).getDocCode();
                 final int position2 = holder.caption.getId();
                 final EditText Caption = (EditText) holder.caption;
                 if(Caption.getText().toString().length()>0){
                    String d = prodList.get(position2).getDocCode();
                    Log.e("dr code",d);

                 }
            }

            @Override
            public void beforeTextChanged(CharSequence s, int start,
                    int count, int after) {
            }

            @Override
            public void afterTextChanged(Editable s) {

            }
        });  
            return convertView;
} 

 static class ViewHolder {
     TextView tvdrCode;
     TextView tvDrName;
     TextView tvterrcode;
     EditText caption;

} 
}

XML code

xml code

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<ListView
    android:id="@+id/listView1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" 
    android:animationCache="false"
    android:scrollingCache="false"
    android:smoothScrollbar="true" > 

<!--    android:descendantFocusability="beforeDescendants" -->

</ListView>

推荐答案

正如我们所知道的ListView重用的ListItem的观点,因为我们滚动整个列表。

As we know ListView reuses the view of ListItem as we scroll the whole list.

所以,问题就出现了,当我们有一个自定义的ListView与EditText上,其中,如果我们进入第一的EditText任何价值,并开始滚动随后的EditText之一的值复制到另一个EditTexts一个接一个,因为我们滚动列表视图。

So problem arises when we have a custom ListView with EditText where if we enter any value in the first EditText and start scrolling then the value of EditText one is copied to another the EditTexts one by one as we scroll the listview .

这恰好为列表视图重复使用的视图,从另一种观点,即认为这是没有看到滚动其他列表项向上它重新使用旧的列表查看,因此该视图的旧值是出现在新的EditText。

This happens as the listview reuses the view and as the other listitem from another view i.e. the view which is not seen scrolls upwards it reuses the old lists view and hence the old value of that view is seen in the new edittext.

的http://www.webplusandroid.com/creating-listview-with-edittext-and-textwatcher-in-android/

阅读全文

相关推荐

最新文章