2016-05-11 9 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

そのままのListItemオブジェクトに数量を追加して、オブジェクトからそれを示してプラスまたはマイナスをクリックしながらViewHolderパターンでビューが、私はまだ得ることはありません..だから... ...

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'と同じですか? –

関連する問題