我试图让半径 NumberPicker 在扩展 DialogPreference 的类中运行,但我在让 setView() 工作时遇到了很多麻烦。让我们从一些代码开始:
public class RadiusPickerPreference extends DialogPreference{
public RadiusPickerPreference(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onPrepareDialogBuilder(android.app.AlertDialog.Builder builder) {
builder.setTitle(R.string.set_radius_dialog_fragment_title);
builder.setView(R.layout.dialog_radius_picker);
builder.setPositiveButton(android.R.string.ok, null);
builder.setNegativeButton(android.R.string.cancel, null);
}
}
这让我在 builder.setView 上出错,说“调用需要 API 21(当前最小值是 15)”。我想支持具有 15+ API 的设备,因此无法更改它。现在,如果我尝试覆盖
protected void onPrepareDialogBuilder(android.support.v7.app.AlertDialog.Builder builder)
相反,它表示“方法不会覆盖其父类(super class)中的方法。”
问题是,如何设置 View ?不一定非要在onPrepareDialogBuilder()中,只要支持API 15+即可。谢谢!
PS:如果您需要更多代码,请告诉我。要使其以 XML 格式显示,只需将其添加到 <PreferenceScreen>
:
<com.example.project.RadiusPickerPreference
android:id="@+id/radPickerPref"
android:key="@string/pref_key_default_radius"
android:title="@string/pref_title_default_radius"/>
最佳答案
您在这里尝试做的是调用 API 21 中添加的函数,而不是 API 1 中添加的函数。根据 the documentation ,您需要 setView(View view)
而不是 setView(int layoutResId)
。要从布局中获取 View
,您需要一个 LayoutInflater
。要获取 LayoutInflater
的实例,您需要一个上下文对象。当您创建对话框时,我建议将您的 Context
作为变量存储在类中以备将来使用。然后,在 onPrepareDialogBuilder
中,您可以使用 ( as per the docs ):
LayoutInflater inflater = (LayoutInflater)context.getSystemService (Context.LAYOUT_INFLATER_SERVICE)
现在,您可以使用 inflater
从布局中获取 View
并按如下方式设置对话框的 View
:
View v = inflater.inflate(R.layout.dialog_radius_picker, null);
因此,您的代码可能如下所示:
@Override
protected void onPrepareDialogBuilder(android.app.AlertDialog.Builder builder) {
LayoutInflater inflater = (LayoutInflater)context.getSystemService (Context.LAYOUT_INFLATER_SERVICE);
builder.setTitle(R.string.set_radius_dialog_fragment_title);
View v = inflater.inflate(R.layout.dialog_radius_picker, null);
builder.setView(v);
builder.setPositiveButton(android.R.string.ok, null);
builder.setNegativeButton(android.R.string.cancel, null);
}
希望对您有所帮助!
关于java - Alertdialog.Builder 设置 View : Call requires API level 21,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30804514/