java - Alertdialog.Builder 设置 View : Call requires API level 21

标签 java android android-alertdialog dialog-preference

我试图让半径 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 ?不一定非要在onPrepareDialogBu​​ilder()中,只要支持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 作为变量存储在类中以备将来使用。然后,在 onPrepareDialogBu​​ilder 中,您可以使用 ( 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/

相关文章:

android - 错误 :Could not find fabric. aar (io.fabric.sdk.android :fabric:1. 3.17)

android - 如何在 Android Studio 的外部库中添加 jar?

android - 如何在 android 应用程序的任何 Activity 中显示警报对话框?

java - fragment 事务空指针

java - JVM 命令启动选项重复

android - 九补丁StateListDrawable渲染问题

java - 对话框仅在启动时第一次启动?

android - 多次调用警报对话框

java - Tomcat 在启动时抛出 "Error listenerStart"

java - 在不考虑计算资源的情况下,套接字可以处理的最大并发连接数是多少?