我有一个适配器,点击就在这个适配器里面,如下所示:
@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?有什么想法吗?
答案 0 :(得分:1)
你可以在你的适配器中有一个回调,所以你可以绑定它,就像这样说你的活动(我从我的C#代码翻译过来,所以看起来有点奇怪,但你明白了):
// call this from activity
// Put your logic/conditions here. Then update the adapter with the given position
adapter.setOnItemClickListener(someCallback);
回调界面
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
你的持有人课程:
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中添加任何逻辑。相反,可能在您的活动中执行逻辑,然后将新数据设置到适配器,并通知更改。