0

我有一个列表视图,它显示从数据库中检索到的项目。列表视图中的每个项目都有一个共享按钮,允许用户共享信息。但是,当我单击共享按钮时,显示的信息与我单击的项目不同。而且无论我点击哪个项目,它都会获取前几个项目的信息。

例如,点击item N 2 会显示item N 3 的信息。也就是说,无论我点击哪个item,它都会显示错误的信息。我在这里做错什么了吗?

**列表视图完美地正确显示项目。

适配器.java

@Override
public View getView(final int  position, View convertView,  ViewGroup parent) {
    // convert view = design
    View v = convertView;

    if(convertView==null){

    v = vi.inflate(Resource, null);
    holder = new ViewHolder();

    holder.titre = (TextView) v.findViewById(R.id.titre);
    holder.artist = (TextView) v.findViewById(R.id.artist); 
    holder.imageview = (ImageView) v.findViewById(R.id.urlImage);
    v.setTag(holder);      


        }

    else

        holder=(ViewHolder)v.getTag();
        holder.titre.setText(mediaList.get(position).getTitre());
        holder.artist.setText(mediaList.get(position).getArtist());
        imageLoader.DisplayImage(mediaList.get(position).getUrl(), loader, holder.imageview );


        Button  button = (Button) v.findViewById(R.id.btnOne);
        //holder=(ViewHolder)v.getTag();
       button.setOnClickListener(new View.OnClickListener() { 
             @Override 
             public void onClick( View v) {
                //holder=(ViewHolder)v.getTag(); 
                //v.setTag(holder);
                 //onShareItem( v);
                 v.getTag();


                 Drawable mDrawable =  holder.imageview.getDrawable();
                 Bitmap mBitmap = ((BitmapDrawable)mDrawable).getBitmap();

                 Intent sharingIntent = new Intent(Intent.ACTION_SEND);

                 sharingIntent.setType("image/png");

                 ByteArrayOutputStream bytes = new ByteArrayOutputStream();

                 mBitmap.compress(Bitmap.CompressFormat.PNG, 1, bytes);

                 String path = Images.Media.insertImage(context.getContentResolver(), 
                            mBitmap, "Image Description", null);

                 Uri imageUri = Uri.parse(path);
                 sharingIntent.putExtra(Intent.EXTRA_STREAM, imageUri);
                 sharingIntent.setType("image/*");

                 sharingIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    context.startActivity( sharingIntent); 


             }



        });
       v.setTag(holder);

       return v;





}
4

1 回答 1

0

解决方案

@Override
public int getCount() {
    return mediaList.size();
} //
@Override
public Media getItem(int position) {
    return mediaList.get(position);
}
@Override
public long getItemId(int position) {
    return position;
} 

public View getView(final int position, View view, ViewGroup parent) {
    final ViewHolder holder;
    int loader = R.drawable.ic_launcher;
    if (view == null) {
        holder = new ViewHolder();
        view = vi.inflate(R.layout.row, null);

        holder.imageview = (ImageView) view.findViewById(R.id.urlImage);

        holder.titre = (TextView) view.findViewById(R.id.titre);

        holder.artist = (TextView) view.findViewById(R.id.artist);

        holder.button1 = (Button) view.findViewById(R.id.btnOne);
        holder.button2 = (Button) view.findViewById(R.id.btnOne);
        view.setTag(holder);

    }else{
        holder = (ViewHolder) view.getTag();    
    }
    imageLoader.DisplayImage(mediaList.get(position).getUrl(), loader, holder.imageview );
    holder.titre.setText(mediaList.get(position).getTitre());
    holder.artist.setText(mediaList.get(position).getArtist());
    holder.button1.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {                               

                //holder=(ViewHolder)v.getTag(); 
                v.setTag(holder);
                 //onShareItem( v);
                int i=  (int) getItemId( position);
                v.getTag(i);
                // v.getTag(holder);

                 //partager *****************************************

                 Drawable mDrawable =  holder.imageview.getDrawable();
                 Bitmap mBitmap = ((BitmapDrawable)mDrawable).getBitmap();

                 Intent sharingIntent = new Intent(Intent.ACTION_SEND);

                 sharingIntent.setType("image/png");

                 ByteArrayOutputStream bytes = new ByteArrayOutputStream();

                 mBitmap.compress(Bitmap.CompressFormat.PNG, 1, bytes);

                 String path = Images.Media.insertImage(context.getContentResolver(), 
                            mBitmap, "Image Description", null);

                 Uri imageUri = Uri.parse(path);
                 sharingIntent.putExtra(Intent.EXTRA_STREAM, imageUri);
                 sharingIntent.setType("image/*");

                 sharingIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    context.startActivity( sharingIntent); 
             /////:::::::::::::::::::::::::::::::::::::::::::

         }                              
    });         



    return view;
}
于 2016-05-06T19:21:39.100 回答