如何从适配器获取上下文以显示 DialogFragment

How get a Context to Show a DialogFragment from Adapter

我在尝试显示来自适配器的 DialogFragment 时遇到问题。

通常我会这样调用 inflaterparent.Context,如下所示:

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.adapterHolder>{
Context context;
List<list> list;

public MyAdapter (List<list> list){
    this.list= list;
}

@Override
public MyAdapter.adapterHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.rec_list, parent, false);
    MyAdapter.adapterHolderholder = new MyAdapter.adapterHolder(v);
    context = parent.getContext();
    return holder;
}.....  

onBindViewHolder 是我点击后显示 DialogFragment 的地方。

 FragmentManager manager= ((AppCompatActivity)context).getSupportFragmentManager();
                            Other manager= new Other();                      
                            Other.show(manager, "Other");

但有时我会收到此错误:

java.lang.ClassCastException: android.view.ContextThemeWrapper cannot be cast to android.support.v7.app.AppCompatActivity
                                                                           at com.miapp.Adapters.MyAdapter.onClick(MyAdapter.java:54)
                                                                           at android.view.View.performClick(View.java:6213)
                                                                           at android.widget.TextView.performClick(TextView.java:11074)

调查了一段时间后,我发现了一些有用的东西,答案就在这个

但是当我实现它时,我总是得到这个错误:

   java.lang.ClassCastException: ccom.miapp.MyContext cannot be cast to android.support.v7.app.AppCompatActivity

有人可以帮我解决这个问题吗?我不知道我是否可以用其他方式显示 DialogFragment 或以其他方式获取上下文。

您可以将 context/activity 引用传递给您的适配器。

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.adapterHolder> {
Context mContext;
List<list> list;

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

@Override
public MyAdapter.adapterHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View v = LayoutInflater.from(mContext).inflate(R.layout.rec_list, parent, false);
    MyAdapter.adapterHolderholder = new MyAdapter.adapterHolder(v);

    return holder;
}.....

但是如果你使用DialogFragment,你的activity必须是一个AppCompatActivity,然后mContext可以转换为一个AppCompatActivity。