android - 如何通过单击 RecyclerView 项打开 AlertDialog?

标签 android android-recyclerview android-alertdialog

我有一个小问题。我无法通过单击 RecyclerView 项目打开 AlertDialog。这是我的 AlertDialog 代码:

public class LoginDialog extends AppCompatDialogFragment {
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        LayoutInflater inflater = getActivity().getLayoutInflater();
        View view = inflater.inflate(R.layout.dialog_fragment, null);
        builder.setView(view)
                .setTitle("Login")
                .setNegativeButton("cancel", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {

                    }
                });
        return builder.create();
    }
}

现在我想通过单击 RecyclerView 项来显示它。这是适配器代码:

public class UserAdapter extends  RecyclerView.Adapter<UserAdapter.UserViewHolder> {
    private List<UserModel> list;
    Context context;

    public UserAdapter(List<UserModel>list, Context context){
        this.context = context;
        this.list = list;
    }

    @Override
    public UserViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        return new UserViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.view_item, parent, false));
    }

    @Override
    public void onBindViewHolder(final UserViewHolder holder, int position) {
        UserModel user = list.get(position);
        holder.textName.setText(user.name + " " + user.surname);
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
               LoginDialog loginDialog = new LoginDialog();
               loginDialog.show()
            }
        });
    }

    @Override
    public int getItemCount() {
        return list.size();
    }

    public class UserViewHolder extends RecyclerView.ViewHolder{

        TextView textName;

        public UserViewHolder(View itemView) {
            super(itemView);
            textName = itemView.findViewById(R.id.textName);
        }
    } 
}

遗憾的是,我无法对 loginDialog.show() 执行任何操作。我无法解析 getSupportFragmentManagergetFragmentManager。唯一的选择是在 LoginDialog 类中创建名为 show 的新函数。但后来我总是得到 NPE..

最佳答案

您在 Adapter 中已经有 Context 。这样就可以直接使用了。

LoginDialog dialogFragment = new LoginDialog ();
 dialogFragment.show(((AppCompatActivity)context).getSupportFragmentManager(), "Fragment");

关于android - 如何通过单击 RecyclerView 项打开 AlertDialog?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49198824/

相关文章:

java - 如何以编程方式关闭Android中的对话框?

android - 通过查询填充微调器

java - 仅加载 Firebase Recycler Adapter 中的 x 项

android - 无法从 ActivityGroup 中的 ListActivity 显示 AlertDialog

android - 如何从 RecyclerView 适配器返回数据?

android - 多个回收者 View ?

android - 使用 android.support.v7.app.AlertDialog 自定义默认的 Theme.AppCompat.Dialog.Alert

Android 在按中点缩放 Canvas 后修复坐标

android - float 操作按钮底部边距不起作用

android - java.text.ParseException : Unparseable date (facebook date) 异常