2016-09-22 65 views
-4

我有回收站視圖。這就像一個網格視圖。網格佈局共有9張圖片。如果我點擊上述任一圖片中的圖片,該圖片必須更改爲另一張圖片。如果我點擊另一張圖片。最後一個想重置。然後,單擊的圖像將單獨變爲突出顯示的圖像。
這裏是我的代碼...如何更改Android中的Recycler View中的圖像(如單選按鈕)?

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

這可以通過自定義ViewHolder類來管理,方法/方法允許您管理該視圖中的圖像。 – zgc7009

+0

請告訴我一些例子。我對android很陌生。請幫助我... –

回答

0

刪除你不要有什麼需要。

@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()); (配置文件)。 holder.linearLayout.setOnClickListener(新View.OnClickListener(){ @覆蓋 公共無效的onClick(查看視圖){

  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(); 
     } 
    }); 
} 
+0

此代碼太特定項目。 – zgc7009

0

的ViewHolder模式是什麼,推Android的開發者使用很長一段時間,和然後(正確地)用RecyclerViews強制它們,這個想法與簡單的ListView相反,它是在滾動時儘可能多地重用視圖以減少通貨膨脹和資源識別,ViewHolder應該被當作是被改變/沒有在RecyclerView中創建。

因此,將信息存儲在ViewHolde必須堅持的r不起作用。爲此,有很多其他的選擇。讓我們來看一個內部類,它將管理當前選定的視圖位置及其相關圖像。

比方說,我們有一個自定義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 
    } 
} 
相關問題