android-numberpicker可以实例化为View吗?

时间:2014-05-30 15:18:28

标签: java android

可以使用startActivity启动

android-numberpicker以启动活动:

startActivity(new Intent(MainActivity.this, LightThemeActivity.class));

它可以作为AlertDialog的视图启动吗?也就是说,可以将它实例化为View,然后可以将其作为setView的输入提供吗?例如:

AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
View view = ... //instantiate android-numberpicker as a view
builder.setView(view);

填写的地方。

修改

AndroidManifest.xml包含

<activity android:name="com.example.LightThemeActivity"
          android:theme="@style/SampleTheme.Light" />

我认为这必须是相关的,因为删除它意味着startActivity(new Intent(MainActivity.this,LightThemeActivity.class))不起作用。

以下代码(在 MainActivity.java 中)启动NumberPicker作为AlertDialog的视图:

NumberPicker np = new NumberPicker(MainActivity.this);
np.setMaxValue(20);
np.setMinValue(0);

AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setView(np);
builder.show();

您还需要以下内容(在 AndroidManifest.xml 中)

<activity android:name="example.MainActivity"
          android:theme="@style/SampleTheme">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

我失踪 android:theme =“@ style / SampleTheme”

问题

为什么

getActivity().getLayoutInflater().inflate(R.layout.activity_light, null)

产生通胀异常?

ANSWER

鉴于样式问题已得到修复,上述内容不再引发异常。因此,替代解决方案如下:

AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);

View view = LayoutInflater.from(MainActivity.this).inflate(R.layout.activity_light, null);
NumberPicker numberPicker = (NumberPicker) view.findViewById(R.id.numberPicker);
numberPicker.setMaxValue(20);
numberPicker.setMinValue(0);

builder.setView(view);

参考

以下主题似乎有关:

Using SimonVT number picker and unable to inflate xml Custom number picker inside fragment

感谢

我非常感谢njzk2提供指导。

1 个答案:

答案 0 :(得分:1)

是的,它是View的子类。

因为它是View的子类,所以你可以这样做:

AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
NumberPicker nb = getActivity().getLayoutInflater().inflate(R.layout.activity_light, null);
builder.setView(nb);