当我尝试从适配器显示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。
答案 0 :(得分:1)
您可以将上下文/活动引用传递给适配器。
ROLLBACK
但是如果您使用DialogFragment,您的活动必须是AppCompatActivity,那么mContext可以转换为AppCompatActivity。