自定义适配器与基本适配器列表项重复

时间:2014-04-22 07:46:20

标签: android listview android-listview

在动态创建 Textview 时,我遇到了自定义适配器的问题。 基本上有不同的游戏有不同数量的礼物。例如,对于一个游戏,可能有3个礼物。因此,我正在动态创建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(venuephotoUrls[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 个答案:

答案 0 :(得分: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 {

...