Пользовательский адаптер с элементами списка базового адаптера, повторяющимися

У меня проблема с пользовательским адаптером при динамическом создании Textview. В основном существуют разные игры с различным количеством подарков. например, для одной игры могут быть 3gifts. Поэтому по этой причине я создаю Textviews динамически. но проблема в том, что элементы переписываются для каждого прокрутки. при загрузке страницы он сам не работает? Может ли кто-нибудь предложить мне, как решить

public View getView(final int position, View convertView, ViewGroup parent) { View view = convertView; ViewHolder holder; if (convertView == null) { view = ((Activity) context).getLayoutInflater().inflate( R.layout.single_redeem_gift, parent, false); holder = new ViewHolder(); holder.expiresDate = (TextView) view.findViewById(R.id.expires_date); holder.expiresTime = (TextView) view.findViewById(R.id.expires_time); holder.right_container = (LinearLayout) view.findViewById(R.id.right_container); holder.brandImage = (ImageView) view .findViewById(R.id.list_image); view.setTag(holder); } else { holder = (ViewHolder) view.getTag(); } ImageLoader imageLoader = ImageLoader.getInstance(); imageLoader.init(ImageLoaderConfiguration.createDefault(context)); imageLoader.displayImage(**************[position], holder.brandImage, doption, animateFirstListener); holder.expiresDate.setText(getDate(Long.valueOf(validUntils[position]).longValue())); holder.expiresTime.setText(getTime(Long.valueOf(validUntils[position]).longValue())); Log.d("redeemables[position]",redeemables[position]); if(redeemables[position].contains("[")) { try { array = new JSONArray(redeemables[position]); System.out.println(array.toString(2)); //loadOccasionData(array); // TODO Auto-generated method stub if(array!= null) { for (int i = 0; i < array.length(); i++) { JSONObject c = null; try { c = array.getJSONObject(i); String redeemId = c.getString("redeemId"); LinearLayout linearLayout_746 = new LinearLayout(RedeemPrizes.this); linearLayout_746.setOrientation(LinearLayout.VERTICAL); LinearLayout.LayoutParams layout_788 = new LinearLayout.LayoutParams(android.view.ViewGroup.LayoutParams.WRAP_CONTENT, android.view.ViewGroup.LayoutParams.WRAP_CONTENT); linearLayout_746.setLayoutParams(layout_788); final TextView offer_drinks = new TextView(RedeemPrizes.this); offer_drinks.setId(Integer.valueOf(c.getString("redeemId"))); offer_drinks.setBackgroundResource(R.drawable.redeemprizes_blackbtn); offer_drinks.setContentDescription(getResources().getString(R.string.app_name)); offer_drinks.setGravity(Gravity.CENTER); // offer_drinks.setText(c.getJSONObject("prize").get("name").toString()); offer_drinks.setText(c.getString("redeemId")); LinearLayout.LayoutParams layout_408 = new LinearLayout.LayoutParams( android.view.ViewGroup.LayoutParams.WRAP_CONTENT, android.view.ViewGroup.LayoutParams.WRAP_CONTENT); layout_408.setMargins(0, 5, 0, 5); offer_drinks.setLayoutParams(layout_408); linearLayout_746.addView(offer_drinks,layout_408); holder.right_container.addView(linearLayout_746); offer_drinks.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Toast.makeText(getApplicationContext(), Integer.toString(offer_drinks.getId()), 3000).show(); } }); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } catch (JSONException e) { e.printStackTrace(); } } else { } return view; }
1 ответ

convertView возвращает результат предыдущего метода getView(). Вам нужно очистить свой right_container в любой итерации метода getView().

Например:

...
try { array = new JSONArray(redeemables[position]); System.out.println(array.toString(2)); //loadOccasionData(array); // TODO Auto-generated method stub holder.right_container.removeAllViews(); // this will fix Your issue if(array!= null) { for (int i = 0; i < array.length(); i++) { JSONObject c = null; try {
...

licensed under cc by-sa 3.0 with attribution.