如何在没有 dralogfragment 实例的情况下从适配器显示对话框片段?
Posted
技术标签:
【中文标题】如何在没有 dralogfragment 实例的情况下从适配器显示对话框片段?【英文标题】:how show a dialogfragment from adapter without dralogfragment instance? 【发布时间】:2018-07-13 06:25:06 【问题描述】:我需要显示一个对话框片段来按下适配器中某个项目上的按钮,现在我这样做了:
适配器类
public class AdaptadorEncuesta extends RecyclerView.Adapter<AdaptadorEncuesta.ViewHolder>
public class ViewHolder extends RecyclerView.ViewHolder implements
View.OnClickListener
DialogoGrafica dialogoGrafica = DialogoGrafica.newInstance();
dialogoGrafica.show(((Activity)mContext).getSupportFragmentManager());
///DialogFragmen.class
public class DialogoGrafica extends DialogFragment
public static DialogoGrafica newInstance()
return new DialogoGrafica();
问题出在这里:
dialogoGrafica.show(((Activity)mContext).getSupportFragmentManager());
在适配器中调用.show()
我能做什么?
【问题讨论】:
【参考方案1】:我认为您需要向 DialogoGrafica 说明您想要展示的片段。像这样的:
((Activity)mContext).getSupportFragmentManager().findFragmentByTag("Your Fragment Name")
【讨论】:
【参考方案2】:你可以通过使用监听器来做到这一点
将此接口添加到您的适配器AdaptadorEncuesta
public interface OnClickedListener
public void onItemClicked();
然后适配器构造函数应该是这样的
OnClickedListener mListener;
public AdaptadorEncuesta(OnClickedListener listener)
mListener = listener;
在初始化适配器时的活动中
AdaptadorEncuesta adapter = new AdaptadorEncuesta(this)
通过this
并在您的活动中实现接口
然后,当您在适配器中按下或调用 click 时,您将调用方法 onClick()
并在 OnClick()
内调用监听器以在活动中运行 onItemClicked()
方法
mListener.onItemClicked();
然后你的活动上的方法onItemClicked()
将运行你已经为他的接口做的实现
现在仍然显示方法内的对话框
@Override
public void onItemClicked(View view)
dialogoGrafica.show(((Activity)mContext).getSupportFragmentManager());
【讨论】:
【参考方案3】:你没有告诉问题,但我想它是 getSupport 没有找到方法的异常......
该方法适用于 AppCompatActivity 而不是 Activity。
所以替换为:
((AppCompatActivity)mContext).getSupportFragmentManager()
【讨论】:
@Maniraj 如果你不使用 AppCompatActivity 你应该改用((Activity)mContext).getFragmentManager()
以上是关于如何在没有 dralogfragment 实例的情况下从适配器显示对话框片段?的主要内容,如果未能解决你的问题,请参考以下文章
如何查找java.lang.NullPointerException的原因