我的activity_main中有一个片段。该片段包含一个按钮(ViewButton)。当我按下这个按钮时,我想要它弹出一个弹出对话框。 我在下面有以下代码,问题是我得到两个我似乎不太了解的错误: 新的AlertDialog.Builder(这); getLayoutInflater();
他们都是未定义的。我的猜测是我需要查看'或者'这个'某处,或延长活动?但我无法完全理解这个问题。
公共类CurrentFragment扩展Fragment {
@Override
public View onCreateView(LayoutInflater inflater,ViewGroup container, Bundle savedInstanceState) {
View view =inflater.inflate(R.layout.current_fragment, container, false);
Button ViewButton = (Button)view.findViewById(R.id.ViewButton);
ViewButton.setOnClickListener(new View.OnClickListener()
{
public void onClick(View view)
//public void ShowPUDialog()
{
AlertDialog.Builder PUHelpBuilder = new AlertDialog.Builder(this);
PUHelpBuilder.setTitle("Enter Pick Up Address");
LayoutInflater inflater = getLayoutInflater();
View DialogLayout = inflater.inflate(R.layout.pudialog, null);
PUHelpBuilder.setView(DialogLayout);
PUHelpBuilder.setPositiveButton("Done", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which)
{
}
});
AlertDialog helpDialog = PUHelpBuilder.create();
helpDialog.show();
}
});
}
return view;
}
}
答案 0 :(得分:1)
使用getActivity()
或v.getContext()
代替this
。由于您位于OnClickListener
(匿名内部类)this
内,因此引用OnClickListener
而不是Context
。尝试像
AlertDialog.Builder PUHelpBuilder = new AlertDialog.Builder(v.getContext());
Context
也需要getLayoutInflater()
,因为它是Activity
方法,所以尝试相同的事情
v.getContext().getLayoutInflater();
修改强>
查看Activity Docs ... extends Context
,这意味着它拥有自己的Context
,这就是为什么你可以在this
内使用Acitivity
的原因} 方法。但正如我所说,在你的onClick()
中,你实际上是在一个匿名的内部阶级中,所以this
不再引用Activity Context
。