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提供指导。
答案 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);