2016-05-11 38 views
0

我有一个自定义的GridView。这是我的应用程序的screesnhot:GridView内部的EditText值更改滚动向上/向下快速移动

enter image description here

而现在当我迅速向下滚动内EDITTEXT值(2)在AYAMBROILER UTUH变成另一种细胞。这是截图:

enter image description here

这究竟是为什么,以及如何解决它?

这是我的适配器代码:

public class CustomGridView2 extends BaseAdapter { 
    private ArrayList<ListItem> listData; 
    private LayoutInflater layoutInflater; 
    private Context context; 
    private String[] imageUrls; 
    private int count = 0; 
    int arrayCount[]; 
    SharedPreferences prefs ; 
    SharedPreference sharedPreference; 
    public CustomGridView2(Context context, ArrayList<ListItem> listData) { 
     this.listData = listData; 
     layoutInflater = LayoutInflater.from(context); 
     this.context = context; 
     sharedPreference = new SharedPreference(); 
    } 

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

    @Override 
    public Object getItem(int position) { 
     return listData.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    public View getView(final int position, View convertView, ViewGroup parent) { 
     final ViewHolder holder; 
     if (convertView == null) { 
      convertView = layoutInflater.inflate(R.layout.afterlogin_product_gridview, null); 
      holder = new ViewHolder(); 
      holder.headlineView = (TextView) convertView.findViewById(R.id.nama_produk); 
      holder.teaserView = (TextView) convertView.findViewById(R.id.harga); 
      holder.imageView = (ImageView) convertView.findViewById(R.id.img_produk); 
      holder.cmdMinus = (Button) convertView.findViewById(R.id.btn_min); 
      holder.cmdPlus = (Button) convertView.findViewById(R.id.btn_plus); 
      holder.qty = (TextView) convertView.findViewById(R.id.lbl_qty); 
      holder.layout1 = (LinearLayout) convertView.findViewById(R.id.layout1); 
      convertView.setTag(holder); 

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

     ListItem newsItem = listData.get(position); 
     String satuan = newsItem.getSatuan().toString(); 
     String harga = newsItem.getReporterName().toString(); 
     harga = "Rp. " + harga + "/" + satuan; 
     holder.headlineView.setText(newsItem.getHeadline().toUpperCase()); 
     holder.teaserView.setText(harga); 

     String a = newsItem.getUrl(); 
     holder.cmdPlus.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       count = Integer.parseInt(holder.qty.getText().toString()); 
       count++; 
       holder.qty.setText(""+count); 
      } 
     }); 

     holder.cmdMinus.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       count = Integer.parseInt(holder.qty.getText().toString()); 

       if(count == 0) { 
        holder.qty.setText("0"); 
       } 
       else { 
        count--; 
        holder.qty.setText("" + count); 
       } 
      } 
     }); 

     if (holder.imageView != null) { 
      //new ImageDownloaderTask(holder.imageView).execute(newsItem.getUrl()); 
      Picasso 
        .with(context) 
        .load(a) 
        .fit() 
        .into(holder.imageView); 
     } 



     holder.qty.addTextChangedListener(new TextWatcher() { 
      @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 (!holder.qty.getText().toString().matches("0")) 
       { 
        holder.layout1.setBackgroundResource(R.drawable.border_radius_gridview); 
       } 
       else 
       { 
        holder.layout1.setBackgroundResource(R.drawable.border_radius); 
       } 
      } 
     }); 

     return convertView; 
    } 

    static class ViewHolder { 
     TextView headlineView; 
     TextView teaserView; 
     ImageView imageView; 
     TextView satuan,qty; 
     Button cmdPlus,cmdMinus; 
     LinearLayout layout1; 
    } 

回答

1

在ViewHolder模式中的视图重用,因为它是...所以,虽然点击加号或减号添加量ListItem对象并从对象表现出来..

holder.teaserView.setText(harga); 
holder.qty.setText(String.valueOf(newsItem.getQuantity())); 

String a = newsItem.getUrl(); 
holder.cmdPlus.setOnClickListener(new View.OnClickListener() { 
@Override 
public void onClick(View v) { 
    count = newsItem.getQuantity(); 
    count++; 
    newsItem.setQuantity(count); 
    holder.qty.setText(""+count); 
} 
}); 

holder.cmdMinus.setOnClickListener(new View.OnClickListener() { 
@Override 
public void onClick(View v) { 
count = newsItem.getQuantity(); 
if(count == 0) { 
    holder.qty.setText("0"); 
} 
else { 
count--; 
newsItem.setQuantity(count); 
holder.qty.setText("" + count); 
} 
} 
}); 
+0

太棒了!你帮了我很多! –

+0

你能帮我这个吗:http://stackoverflow.com/questions/37110188/first-time-sharedpreferences-use-with-gridview?noredirect=1#comment61799691_37110188? –

1

这是由于这样的事实,观点重复使用在所有的滚动视图 - recylcerview ListView和GridView控件。所以当视图被重用时,它们的值显示在它不应该显示的位置。看看下面的链接来解决你的问题。

EditText loses content on scroll in ListView

如果您有任何疑问,让我知道。

+0

我还是不明白它。 'scoresToUpdate'从哪里来?和我的代码中的newsItem一样吗? –