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

时间:2018-04-07 02:51:12

标签: android android-context android-dialogfragment

当我尝试从适配器显示DialogFragment时出现问题。

通常我已完成此操作,调用parent.Context的{​​{1}}如下:

inflater

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");

经过一段时间的调查后,我发现了一些有用的东西,这是link.

中的答案

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

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

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

1 个答案:

答案 0 :(得分:1)

您可以将上下文/活动引用传递给适配器。

ROLLBACK

但是如果您使用DialogFragment,您的活动必须是AppCompatActivity,那么mContext可以转换为AppCompatActivity。