繁体   English   中英

如何在适配器 class 中显示 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM