2016-05-11 87 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一樣嗎? –

相關問題