在recyclerView中执行MainActivity方法



我有一个Layout作为图像,图像下面有一个recyclerView,我希望当用户单击列表中的一个元素时,图像会发生更改。

我试着这样做,但没有奏效:

更改MainActivity中图像的方法

`

public void setImagem (){
runOnUiThread(new Runnable() {
public void run() {
imageView.setImageResource(R.drawable.cascatinha);
}
});
}

`on点击回收器内的方法查看

`

holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
MainActivity mainActivity = new MainActivity();
mainActivity.setImagem();

}
});

`

当我点击其中一个元素时,应用程序关闭,并显示以下错误消息:

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageView.setImageResource(int)' on a null object reference

runOnUiThread不允许您访问任何底层视图,它只是在负责呈现UI的线程上运行。

不过,它背后的想法是正确的。您需要有某种方法来引用活动中的元素。

创建一些带有回调函数的接口,并在活动中创建一个实例。

interface OnItemClickListener {
void onItemClick(/* Here have an argument that you want to pass from RecyclerView*/);
}

活动实施:

private OnItemClickListener mListener = new OnItemClickListener () {
@Override
public void onItemClick(String message) { // e.g. message
//setImage();
}
};

只需将其传递到适配器的构造函数中并存储即可

new *****Adapter(..., listener)
class ****Adapter {
private OnItemClickListener mListener;

只需在您设置的onClickListener中调用它:

holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
listener.onItemClick("message");
}
});

最新更新