2016-01-26 2 views
0

У меня есть адаптер и по щелчку внутри этого адаптера, как это:Как изменить изображение с адаптера, когда пользователь нажимает кнопку?

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


    final Movie currentMovie = movieList.get(position); 

    holder.textView.setText(currentMovie.getMovieName()); 

    try { 
     UrlImageViewHelper.setUrlDrawable(holder.imageView, currentMovie.getMoviePictureLinkString(), R.drawable.placeholder_logo); 
    } catch (Exception e) { 
     holder.imageView.setImageDrawable(context.getResources().getDrawable(R.drawable.placeholder_logo)); 
    } 


    try { 
     if (currentMovie.getMoviePurchaseDetail() == Movie.PURCHASE_BOUGHT) { 
      holder.tagImage.setBackground(context.getResources().getDrawable(R.drawable.tag_upgrade)); 

     } else if (currentMovie.getMoviePurchaseDetail() == Movie.PURCHASE_BUY) { 
      holder.tagImage.setBackground(context.getResources().getDrawable(R.drawable.tag_buy)); 

     } else if (currentMovie.getMoviePurchaseDetail() == Movie.PURCHASE_DEFAULT) { 
      holder.tagImage.setBackgroundResource(0); 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 


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

      if (currentMovie.getMoviePurchaseDetail() == Movie.PURCHASE_DEFAULT) { 

       LinkConfig 
         .loadMovieLink(context, currentMovie); 

      } else if (currentMovie.getMoviePurchaseDetail() == Movie.PURCHASE_BOUGHT) { 

       LinkConfig 
         .loadMovieLink(context, currentMovie); 


       /*if (loginType == Util.LOGIN_TYPE_ACCOUNT) { 
        LinkConfig 
          .loadMovieLink(context, currentMovie); 

       } else { 
        showDialogForFreeUser(); 

       }*/ 


      } else { 

       MultipleUsedMethods.showBuyDialog(
         context, currentMovie); 

       /* if (loginType == Util.LOGIN_TYPE_ACCOUNT) { 
        MultipleUsedMethods.showBuyDialog(
          context, currentMovie); 
       } else { 
        showDialogForFreeUser(); 

       }*/ 


      } 

     } 
    }); 



} 

теперь, когда я нажимаю на anyitem он проходит через различные методы и после того, как одно условия преуспевающего в каких-то методах я должен изменить тег адаптер для этого условия:

try { 
     if (currentMovie.getMoviePurchaseDetail() == Movie.PURCHASE_BOUGHT) { 
      holder.tagImage.setBackground(context.getResources().getDrawable(R.drawable.tag_upgrade)); 

     } else if (currentMovie.getMoviePurchaseDetail() == Movie.PURCHASE_BUY) { 
      holder.tagImage.setBackground(context.getResources().getDrawable(R.drawable.tag_buy)); 

     } else if (currentMovie.getMoviePurchaseDetail() == Movie.PURCHASE_DEFAULT) { 
      holder.tagImage.setBackgroundResource(0); 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

Как я могу изменить этот tagImage для адаптера от другого метода? Есть идеи?

ответ

1

Вы можете иметь обратный вызов в адаптере, так что вы можете привязать к нему от аренды, ваша деятельность, как это (я перевел это из моих C# код, так это может выглядеть немного странно, но вы получите идею):

// call this from activity 
// Put your logic/conditions here. Then update the adapter with the given position 
adapter.setOnItemClickListener(someCallback); 

Callback интерфейс

interface ICallback{ 
    void onItemClick(int position); 
} 

В адаптере

public void setOnItemClickListener(ICallback callback){ 
    this.callback = callback 
} 

@Override 
public void onCreateViewHolder (ViewGroup parent, int viewType) 
    { 
     View itemView = // inflate your layout here 
     var vh = new ImageViewHolder (itemView, this.callback); 
     return vh; 
    } 

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

    final SomeClass item = yourList.get(position); 

    holder.view.setText(item.getYourData()); 
    // Don't put any logic in this function 
    // only set your data to view here 

Ваш Holder класс:

public class ImageViewHolder extends RecyclerView.ViewHolder 
{ 
    public ImageView image; 

    public ImageViewHolder (View itemView, ICallback callback) : base (itemView) 
    { 
     v = (View)itemView.findViewById(Resource.Id.image); 
     v.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if(callback != null) 
       callback.onItemClick(super.position) 
     }); 
    } 
} 

У вас есть позиция щелкнутого элемента в адаптере, вы можете легко отредактировать его значения в адаптере. Вы не должны вводить какую-либо логику в onBindViewHolder адаптера. Вместо этого выполните логику, возможно, в вашей деятельности, затем установите новые данные в адаптер и сообщите об изменениях.

Смежные вопросы