android - 当我单击 Recyclerview 中的 ImageView 时,我想打开对话框
问题描述
当我单击 Recyclerview 中的 ImageView 时,我想打开对话框。
当我显示 Toast 时它正在工作(显示)但是当我想显示 AlertDialog Box 时它不工作(在图像单击应用程序崩溃时)请解决它。这是我的适配器类:-
public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.MyViewHolder> {
private ArrayList<GetterSetter> arrayList;
private Context context;
public RecyclerAdapter(ArrayList<GetterSetter> arrayList, Context context){
this.arrayList = arrayList;
this.context = context;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.detail,viewGroup,false);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder myViewHolder, final int i) {
GetterSetter fp = arrayList.get(i);
myViewHolder.nametxt.setText(fp.getEmpname());
myViewHolder.companytxt.setText(fp.getCompanyname());
myViewHolder.proImg.setImageResource(fp.getEmppic());
myViewHolder.callImg.setImageResource(fp.callpic);
myViewHolder.msgimg.setImageResource(fp.msgpic);
myViewHolder.callImg.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
final Dialog dialog = new Dialog(context);
dialog.setContentView(R.layout.design);
dialog.setTitle("Dialog Box");
TextView text = (TextView) dialog.findViewById(R.id.text);
text.setText("Android custom dialog example!");
Button button = (Button) dialog.findViewById(R.id.okbtn);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dialog.dismiss();
}
});
dialog.show();
}
});
}
@Override
public int getItemCount() {
return arrayList.size();
}
public class MyViewHolder extends RecyclerView.ViewHolder {
ImageView proImg,callImg,msgimg;
TextView nametxt,companytxt;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
itemView.setOnClickListener(null);
proImg = itemView.findViewById(R.id.imageView);
callImg = itemView.findViewById(R.id.smallimage1);
msgimg = itemView.findViewById(R.id.smallimage2);
nametxt = itemView.findViewById(R.id.name);
companytxt = itemView.findViewById(R.id.company);
}
}
}
解决方案
试试这个代码..
将接口变成适配器类以进行单击事件处理..
OnItemClick onItemClick;
public void setOnItemClick(OnItemClick onItemClick) {
this.onItemClick = onItemClick;
}
public interface OnItemClick {
void getPosition(); //pass any things
}
在那之后..
@Override
public void onBindViewHolder(ItemViewHolder holder, final int position) {
// below code handle click event on recycler view item.
String data = mStringList.get(position);
holder.textView.setText(data);
holder.imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
onItemClick.getPosition();
}
});
}
之后将对话框代码变成一种方法并定义为活动..
private void showDialog(){
final Dialog dialog = new Dialog(this);
dialog.setContentView(R.layout.design);
dialog.setTitle("Dialog Box");
TextView text = (TextView) dialog.findViewById(R.id.text);
text.setText("Android custom dialog example!");
Button button = (Button) dialog.findViewById(R.id.okbtn);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dialog.dismiss();
}
});
dialog.show();
}
在将适配器绑定到 recyclerview 或 listview 之后,这意味着适配器不为空,然后调用下面的代码..
adpater.setOnItemClick(new RecyclerViewAdpater.OnItemClick() {
@Override
public void getPosition() {
showDialog();
}
});
推荐阅读
- java - 无法在 HandlerInterceptor postHandle() 方法中读取请求正文
- javascript - 将嵌套数组中的对象数组分组并将其总数添加到新数组中
- c# - 在 webapi .net core 3.1 上添加 app.useauthentication 时 Cors 失败
- apache-poi - Apache POI Excelsheet 到 pdf 文件
- git - 如何解决 GitHub 和 VisualStudio 上的烂摊子
- java - 如果我使用 STS 使用 java 8,那么 java 中 List.of() 的替代方法是什么
- asp.net-core-webapi - 并行文件下载 asp.net core
- abp - Abp vNext Rowaction 下拉按钮文本
- jenkins - TriggerRemoteJob - 连接到远程服务器失败
- parquet - 增量加载的 parquet 文件如何提高性能?