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

У меня проблема с пользовательским адаптером при динамическом создании 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.