简体   繁体   English

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

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

I am having Recycler View.我有回收站视图。 It's like a grid view.它就像一个网格视图。 A total of 9 images in grid layout.网格布局共 9 张图像。 If I click a image in any one of the above, that image have to change to an another image.如果我单击上述任何一个中的图像,该图像必须更改为另一个图像。 If I click another image.如果我单击另一个图像。 Last one want to reset.最后一个想重置。 Then the clicked image alone will change to highlighted image.然后单独单击的图像将更改为突出显示的图像。
Here is my code...这是我的代码...

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);
        }
    });

Remove what you dont need.删除你不需要的东西。

@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());
    //  }

circularImageView.setImageDrawable(elements.get(position).getProfileImage()); circleImageView.setImageDrawable(elements.get(position).getProfileImage()); //Picasso.with(context).load(elements.get(position).getProfileImage()).into(circularImageView); //Picasso.with(context).load(elements.get(position).getProfileImage()).into(circularImageView); holder.linearLayout.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { 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();
        }
    });
}

The ViewHolder pattern is something that Android pushed developers to use for a long time, and then (rightfully) forced on them with RecyclerViews. ViewHolder 模式是 Android 推动开发人员使用很长时间的东西,然后(理所当然地)用 RecyclerViews 强加给他们。 The idea, opposed to a simple ListView, is that you reuse as much of the view as possible when scrolling to reduce inflation and resource identification.与简单的 ListView 不同,这个想法是在滚动时尽可能多地重用视图以减少膨胀和资源识别。 The ViewHolder should be managed as something that is changed/not created within the RecyclerView. ViewHolder 应该作为在 RecyclerView 中更改/未创建的内容进行管理。

Because of that, storing information in a ViewHolder that must be persistent will not work.因此,将信息存储在必须持久化的 ViewHolder 中是行不通的。 For that, there are a plethora of other options.为此,还有很多其他选择。 Let's go with an inner class that will manage holding onto the currently selected view position and its relative images.让我们使用一个内部类来管理当前选定的视图位置及其相关图像。

Let's say we have a custom ViewHolder like below:假设我们有一个如下所示的自定义 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;
    }
}

And utilizing that view holder is an adapter DemoAdapter , we can modify it to look something like this:利用该视图持有者是一个适配器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()
    }
}

Then if we have an activity that needs the selected image, perhaps to display it in an ImageView it hosts然后,如果我们有一个需要所选图像的活动,也许要将其显示在它托管的 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.

相关问题 在Android的“回收器”视图中的“无线电组”中选择单选按钮? - selection of radio button in Radio Group in Recycler view in android? Android如何以编程方式更改单选按钮图像 - Android how to change the radio button image programatically 在 Android Studio 中使用 Recycler View 重置单选按钮状态 - Reset Radio Button State using Recycler View in Android Studio 如何通过单选按钮在Recycler View中调用API - How Do I call API in recycler View with the help of radio button 如何在回收站视图中保留先前选择的单选按钮 - how to retain the previously selected radio button in recycler view 如何在Android的Firebase Recycler视图中添加按钮? - How to add a button to Firebase Recycler view in Android? Snapchat 像回收站视图中的“添加朋友”按钮 android - Snapchat like Add Friend button in recycler view android Android:如何取消回收者查看图像请求 - Android: How to cancell recycler view image request 在回收者视图中单选按钮状态未保留 - radio button state is not retaining in recycler view Android-如何使用回收站视图创建类似的视图? - Android - How to create a view like this using recycler view?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM