簡體   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