我有一个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");
}
});