[英]How to modify the height and width of a LinearLayout programmatically for a customAlertDialog?
[英]how to show CustomAlertDialog in an Adapter class?
请告诉我如何从适配器 Class 显示我的 CustomAlertDialog? 显然Application.getContext(), dialogObject
不起作用,我应该传递一个 Activity 引用,但我不知道如何。
适配器 Class =>
public class mAdapter extends RecyclerView.Adapter<E04Adapter.VH> {
List<mObject> object ;
dbConnector dbConnector;
public E04Adapter (List<mObject> object , dbConnector dbConnector) {
this.object = object ;
this.dbConnector = dbConnector ;
}
@NonNull
@Override
public VH onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(Application.getContext()).inflate(R.layout.layout_e04_row , parent , false) ;
return new VH(view);
}
@Override
public void onBindViewHolder(@NonNull VH holder, int position) {
}
@Override
public int getItemCount() {
return object.size();
}
public class VH extends RecyclerView.ViewHolder implements View.OnClickListener {
ImageButton seenBtn , deleteBtn ;
public VH(@NonNull View itemView) {
super(itemView);
firstLetter = itemView.findViewById(R.id.firstLetter) ;
noteNameText = itemView.findViewById(R.id.noteNameText);
seenBtn = itemView.findViewById(R.id.seenBtn) ;
deleteBtn = itemView.findViewById(R.id.deleteBtn) ;
noteRowCard = itemView.findViewById(R.id.noteRowCard) ;
seenBtn .setOnClickListener(this);
noteRowCard.setOnClickListener(this);
deleteBtn .setOnClickListener(this);
}
@Override
public void onClick(View view) {
DialogObject dialogObject = new DialogObject() ;
CustomDialogView customDialogView = new CustomDialogView(Application.getContext() , dialogObject) ;
if (view == deleteBtn) {
customDialogView.show();
}
对话类 =>
public class CustomDialogView extends AlertDialog implements View.OnClickListener {
DialogObject object ;
FloatingActionButton noFab , okFab ;
public CustomDialogView(Context context , DialogObject object) {
super(context);
this.object = object ;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.custom_alert_dialog);
noFab = findViewById(R.id.noFab) ;
okFab = findViewById(R.id.okFab) ;
okFab.setOnClickListener(this);
noFab.setOnClickListener(this);
}
@Override
public void onClick(View view) {
if (view == okFab) {
object.getListener().onPositive();
}
else if (view == noFab) {
object.getListener().onNegative();
}
}
}
您应该将监听器从活动或片段传递到适配器并在监听器中显示自定义对话框。 像这样:
interface OnItemClickListener {
void onClickItem(int position);
}
class MyActivity extends AppCompatActivity implements OnItemClickListener {
private MyAdapter myAdapter;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
myAdapter = new MyAdapter(this);
//...
}
@Override
public void onClickItem(int position) {
// show custom alert dialog.
}
//...
}
class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private OnItemClickListener onItemClickListener;
public MyAdapter(OnItemClickListener onItemClickListener) {
this.onItemClickListener = onItemClickListener;
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
//...
return new MyViewHolder(itemView, onItemClickListener);
}
//...
}
class MyViewHolder extends RecyclerView.ViewHolder {
public MyViewHolder(@NonNull View itemView, OnItemClickListener onItemClickListener) {
super(itemView);
itemView.setOnClickListener(v -> {
int position = getAdapterPosition();
if (position != RecyclerView.NO_POSITION) {
onItemClickListener.onClickItem(position);
}
});
}
//..
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.