繁体   English   中英

如何在android中的Recycler View中更改图像(如单选按钮)?

[英]how to change image in Recycler View in android (like a radio button)?

我有回收站视图。 它就像一个网格视图。 网格布局共 9 张图像。 如果我单击上述任何一个中的图像,该图像必须更改为另一个图像。 如果我单击另一个图像。 最后一个想重置。 然后单独单击的图像将更改为突出显示的图像。
这是我的代码...

holder.mLayout.setOnClickListener(new View.OnClickListener() {
        @Override public void onClick(View view) {

            //for (int i = 0; i < data_collection.size(); i++) {

                holder.mLayout.setVisibility(View.VISIBLE);
                holder.mHighLighted.setVisibility(View.GONE);
                if (position == i) {

                }
            //}
            holder.mLayout.setVisibility(View.GONE);
            holder.mHighLighted.setVisibility(View.VISIBLE);

            mHighLight.onHighLight(position, view);
        }
    });

删除你不需要的东西。

@Override
public void onBindViewHolder(final SimpleViewHolder holder, final int position) {

    holder.textView.setText(elements.get(position).getName());
    holder.textView.setTypeface(typeface1);
    CircularImageView circularImageView = (CircularImageView) holder.linearLayout.findViewById(R.id.personazhe_layout_grid_item_image);
    //  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
    //    circularImageView.setBackground(elements.get(position).getPhoto());
    //  }

circleImageView.setImageDrawable(elements.get(position).getProfileImage()); //Picasso.with(context).load(elements.get(position).getProfileImage()).into(circularImageView); holder.linearLayout.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) {

            if(pos != position){


            c.setImageDrawable(elements.get(position).getProfileImage());
            t.setText(elements.get(position).getName());
            seekBar.setProgress(0);
            pos = position;
            }

            //image = elements.get(position).getProfileImage();
            // textviews
          //  trajneri = elements.get(position).getTrajneri();
         //   mosha = elements.get(position).getMosha();
          //  vendbanimi = elements.get(position).getVendbanimi();
          //  vendlindja = elements.get(position).getVendlindja();
          //  arsimi = elements.get(position).getArsimi();
          //  name = elements.get(position).getName();
           // surname = elements.get(position).getSurname();
           // pos = elements.get(position).number();
          //  posi = position;


          //  button.performClick();
        }
    });
}

ViewHolder 模式是 Android 推动开发人员使用很长时间的东西,然后(理所当然地)用 RecyclerViews 强加给他们。 与简单的 ListView 不同,这个想法是在滚动时尽可能多地重用视图以减少膨胀和资源识别。 ViewHolder 应该作为在 RecyclerView 中更改/未创建的内容进行管理。

因此,将信息存储在必须持久化的 ViewHolder 中是行不通的。 为此,还有很多其他选择。 让我们使用一个内部类来管理当前选定的视图位置及其相关图像。

假设我们有一个如下所示的自定义 ViewHolder:

public class ImageViewHolder extends RecyclerView.ViewHolder{
    private ImageView iv;

    public ImageViewHolder(View v){
        iv = (ImageView) v.findViewById(R.id.iv);
    }

    public ImageVie getImageView(){
        return iv;
    }
}

利用该视图持有者是一个适配器DemoAdapter ,我们可以将其修改为如下所示:

public class DemoAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{

    public interface SelectionListener{
        void onImageSelected(Bitmap bmp);
    }

    private static class SelectionHolder{
        protected int position;
        protected Bitmap originalBmp, newBmp;

        public SelectionHolder(int position, Bitmap originalBmp,
                Bitmap newBmp){
            this.position = position;
            this.originalBmp = originalBmp;
            this.newBmp = newBmp
        }
    }

    private SelectionHolder selectionHolder;
    private SelectionListener selectionListener;

    /*
     Pre-existing Adapter functionality
     */

    public void setSelectionListener(SelectionListener listener){
        selectionListener = listener;
    }

    @Override
    public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int position) {
        /*
         Pre-existing onBindViewHolder code
         */

        ImageView iv = holder.getImageView();

        if(selectionHolder != null && selectionHolder.position == position)
            iv.setImageBitmap(selectionHolder.newBmp);
        else{
            //set the image however you are doing it now
        }

        iv.setOnClickListener(
                new new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        ImageView iv = (ImageView) v;
                        // Get the IV's current bmp
                        Bitmap originalBmp = getBitmapFromImageView(iv);
                        // Get the currently selected image's "new" image
                        // if it is null, set it to the original bmp
                        // this will initialize our "highlighting"
                        Bitmap newBmp = selectionHolder == null || selectionHolder.newBmp == null?
                            originalBmp: selectoinHolder.newBmp;

                        // set the selection holder
                        selectionHolder = new SelectionHolder(position, originalBmp, newBmp);

                        // notify our listener
                        if(selectionListener != null)
                            selectionListener.onImageSelected(bmp);

                        // refresh the adapter
                        DemoAdapter.this.notifyDataSetChanged();
                    }
                });
    }

    private Bitmap getBitmapFromImageView(ImageView iv){
        return ((BitmapDrawable)(iv.getDrawable()).getBitmap()
    }
}

然后,如果我们有一个需要所选图像的活动,也许要将其显示在它托管的 ImageView 中

recyclerAdapter = new DemoAdapter(...);
recyclerAdapter.setSelectionListener(new SelectionListener(){
    @Override
    public void onImageSelected(Bitmap bmp){
        // set the bmp to your image view or whatever you want
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM