Android 适配器选择问题

Android 适配器选择问题,android,listview,Android,Listview,我有一个扩展BaseAdapter的ListView。我有一个数组列表。ListView会正确膨胀和填充。我正在使用flipper视图将布局更改为其他布局,但问题是当我单击第一个项目时,它会旋转,但第三行或第六行的项目也会旋转 列表视图如何修复我只需要图像是选定项目的更改 ArrayList<product_data> al=new ArrayList<product_data>(); class product_data { String post_ti

我有一个扩展BaseAdapter的ListView。我有一个数组列表。ListView会正确膨胀和填充。我正在使用flipper视图将布局更改为其他布局,但问题是当我单击第一个项目时,它会旋转,但第三行或第六行的项目也会旋转 列表视图如何修复我只需要图像是选定项目的更改

    ArrayList<product_data> al=new ArrayList<product_data>();
class product_data
{
    String post_title;
    String newprice;
    String oldprice;
    String image;
    String id;
    product_data(String post_title,String newprice,String oldprice,String image,String id)
    {
        this.post_title=post_title;
        this.newprice=newprice;
        this.oldprice=oldprice;
        this.image=image;
        this.id=id;

    }
}
}

当我点击第一个项目时,它会旋转,另一个视图会出现

但当我滚动时,下图中的第四项也会旋转


我在相对视图上使用点击列表器,如代码“使用ViewHolder for fill adapter”中所示。那可能会解决你的问题

示例代码

@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater mInflater = LayoutInflater.from(context);
        final ViewHolder holder;
        if (convertView == null) {

            convertView = mInflater.inflate(
                    R.layout.news_by_categories_content, null);
            holder = new ViewHolder();
            holder.strNewsTitle = (TextView) convertView
                    .findViewById(R.id.txtNewsByCategories);


            convertView.setTag(holder);

        } else {
            holder = (ViewHolder) convertView.getTag();
        }
        NewsListByCategoriesItem obj = new NewsListByCategoriesItem(); // My Model class getting value from this
        obj = newsArray.get(position);
        holder.strNewsTitle.setText(obj.getStrNewsTitle());


        return convertView;
    }

    class ViewHolder {
        TextView strNewsTitle;


    }

}

您确实在getView方法中启动了动画!!!!,你知道它有多贵吗。该方法将在每次向上滚动查看下一个项目时调用。开始动画用于列表视图布局,但我关心的是项目布局检查回拨、翻转动画。我使用了已实现的3d旋转类
class MyAdapter extends BaseAdapter
{

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return al.size();
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return al.get(position);
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    @Override
    public View getView(int position, View singleView, ViewGroup parent) {
        // TODO Auto-generated method stub
        final int ok=position;

        if(singleView==null)
        {
            LayoutInflater inflater = LayoutInflater.from(parent.getContext());
            singleView = inflater.inflate(R.layout.product_ist_layout,parent,false);
            System.out.println("from the if"+position);
            viewAnimator = (ViewAnimator)singleView.findViewById(R.id.viewFlipper);
             rootLayout = (View)singleView.findViewById(R.id.main_activity_root);
             cardFace = (View)singleView.findViewById(R.id.main_activity_card_face);
             cardBack = (View) singleView.findViewById(R.id.main_activity_card_back);
        }

            System.out.println("from the else");


        System.out.println("Position in else"+position);
        product_data a=al.get(position);
        TextView tv1=(TextView)singleView.findViewById(R.id.textView2);
        TextView tv2=(TextView)singleView.findViewById(R.id.textView3);
        TextView tv3=(TextView)singleView.findViewById(R.id.textView1);

            /**
             * Bind a click listener to initiate the flip transitions
             */
            viewAnimator.setOnClickListener(new OnClickListener() { 
                @Override
                public void onClick(View v) { 
                    // This is all you need to do to 3D flip

                    AnimationFactory.flipTransition(viewAnimator, FlipDirection.LEFT_RIGHT);
                }

            });



            cardFace.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    System.out.println("positon"+ok);
                    AnimationFactory.flipTransition(viewAnimator, FlipDirection.LEFT_RIGHT);

                }
            });


         cardBack.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View arg0) {
                    // TODO Auto-generated method stub
                    AnimationFactory.flipTransition(viewAnimator, FlipDirection.LEFT_RIGHT);
                }
            });

        imgview1=(ImageView)singleView.findViewById(R.id.imageView4);
         imgview1.setTag(position);
        imgview1.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                int position1=(Integer)v.getTag();
                  System.out.println(position1);
                  String id=al.get(position1).id;
                  System.out.println("id from the list"+id);
                Intent in=new Intent(product_list_Activity.this,rating_dialog.class);
                in.putExtra("id",id);
                startActivity(in);

            }
        });
    ImageView   imgview2=(ImageView)singleView.findViewById(R.id.imageView5);
         imgview2.setTag(position);
        imgview2.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                int position1=(Integer)v.getTag();
                  System.out.println(position1);
                  String id=al.get(position1).id;
                  System.out.println("id from the list"+id);
                Intent in=new Intent(product_list_Activity.this,product_review.class);
                in.putExtra("id",id);
                startActivity(in);

            }
        });

        tv3.setTag(position);
        tv3.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

                int position1=(Integer)v.getTag();
                System.out.println("from the review "+position1);
                String id=al.get(position1).id;
                globalvariables.product_id=id;
                Intent in=new Intent(getApplicationContext(),review_product_tabbar.class);
                startActivity(in);

            }
        });
        tv1.setText(a.post_title);
        tv2.setText("$"+a.oldprice);
        tv1.setTypeface(tf);
        tv2.setTypeface(tf);
        tv3.setTypeface(tf);
        int loader = R.drawable.ic_launcher;
        ImageView image = (ImageView)singleView. findViewById(R.id.imageView1);

        imgLoader.DisplayImage(a.image, loader, image);
        Animation anim = new Rotate3dAnimation(90.0f, 0.0f, 100.0f, false, singleView);
        anim.setDuration(1000l);
        singleView.startAnimation(anim);


        return singleView;
    }
}
@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater mInflater = LayoutInflater.from(context);
        final ViewHolder holder;
        if (convertView == null) {

            convertView = mInflater.inflate(
                    R.layout.news_by_categories_content, null);
            holder = new ViewHolder();
            holder.strNewsTitle = (TextView) convertView
                    .findViewById(R.id.txtNewsByCategories);


            convertView.setTag(holder);

        } else {
            holder = (ViewHolder) convertView.getTag();
        }
        NewsListByCategoriesItem obj = new NewsListByCategoriesItem(); // My Model class getting value from this
        obj = newsArray.get(position);
        holder.strNewsTitle.setText(obj.getStrNewsTitle());


        return convertView;
    }

    class ViewHolder {
        TextView strNewsTitle;


    }

}