如何从适配器获取上下文以显示 DialogFragment
How get a Context to Show a DialogFragment from Adapter
我在尝试显示来自适配器的 DialogFragment 时遇到问题。
通常我会这样调用 inflater
的 parent.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。
我在尝试显示来自适配器的 DialogFragment 时遇到问题。
通常我会这样调用 inflater
的 parent.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。