オンザフライで入力ウィンドウを作成するファクトリ クラスがあります。このファクトリ クラスを作成する理由は、入力ウィンドウが多数あるため、入力ウィンドウの作成を簡素化するためです。現在、アプリを iOS から Android に移植していますが、そのときにこの問題を発見しました。
私は次のようにテキストフィールドを作成しようとしています:
textField = Ti.UI.createTextField
left: indentLeft
right: 10
color: "#336699"
borderStyle: Ti.UI.INPUT_BORDERSTYLE_NONE
field: field
hintText: field.hint
value: field.value
tag: field.name
autocorrect: field.autocorrect
autocapitalization: field.autocapitalization
enabled: (field.enabled != false)
keyboardType: field.keyboardType
passwordMask: field.passwordMask
returnKeyType: Ti.UI.RETURNKEY_DEFAULT
textAlign: field.textAlign
これは iOS では問題なく動作し、field.keyboardType と field.passwordMask で指定された値は、チタンのドキュメントによると完全に正当な値です。ただし、passwordMask AND keyboardType をコメントアウトしない限り、私の Android アプリはクラッシュします...なぜこれが起こるのでしょうか? Androidのクラッシュログは次のとおりです。
E/TiApplication( 1216): (main) [249,918] Sending event: exception on thread: main msg:java.lang.IllegalArgumentException: Unable to convert null to boolean.; Titanium 2.0.1,2012/04/12 16:36,999c68a
E/TiApplication( 1216): java.lang.IllegalArgumentException: Unable to convert null to boolean.
E/TiApplication( 1216): at org.appcelerator.titanium.util.TiConvert.toBoolean(TiConvert.java:342)
E/TiApplication( 1216): at org.appcelerator.titanium.util.TiConvert.toBoolean(TiConvert.java:355)
E/TiApplication( 1216): at ti.modules.titanium.ui.widget.TiUIText.handleKeyboard(TiUIText.java:368)
E/TiApplication( 1216): at ti.modules.titanium.ui.widget.TiUIText.processProperties(TiUIText.java:171)
E/TiApplication( 1216): at org.appcelerator.kroll.KrollProxy.setModelListener(KrollProxy.java:737)
E/TiApplication( 1216): at org.appcelerator.titanium.proxy.TiViewProxy.realizeViews(TiViewProxy.java:530)
E/TiApplication( 1216): at org.appcelerator.titanium.proxy.TiViewProxy.handleGetView(TiViewProxy.java:522)
E/TiApplication( 1216): at org.appcelerator.titanium.proxy.TiViewProxy.getOrCreateView(TiViewProxy.java:500)
E/TiApplication( 1216): at org.appcelerator.titanium.proxy.TiViewProxy.forceCreateView(TiViewProxy.java:485)
E/TiApplication( 1216): at ti.modules.titanium.ui.widget.tableview.TiTableViewRowProxyItem.refreshControls(TiTableViewRowProxyItem.java:133)
E/TiApplication( 1216): at ti.modules.titanium.ui.widget.tableview.TiTableViewRowProxyItem.setRowData(TiTableViewRowProxyItem.java:280)
E/TiApplication( 1216): at ti.modules.titanium.ui.widget.tableview.TiTableViewRowProxyItem.setRowData(TiTableViewRowProxyItem.java:84)
E/TiApplication( 1216): at ti.modules.titanium.ui.widget.tableview.TiTableView$TTVListAdapter.getView(TiTableView.java:216)
E/TiApplication( 1216): at android.widget.AbsListView.obtainView(AbsListView.java:1315)
E/TiApplication( 1216): at android.widget.ListView.makeAndAddView(ListView.java:1727)
E/TiApplication( 1216): at android.widget.ListView.fillDown(ListView.java:652)
E/TiApplication( 1216): at android.widget.ListView.fillSpecific(ListView.java:1284)
E/TiApplication( 1216): at android.widget.ListView.layoutChildren(ListView.java:1570)
E/TiApplication( 1216): at android.widget.AbsListView.onLayout(AbsListView.java:1147)
E/TiApplication( 1216): at android.view.View.layout(View.java:7035)
E/TiApplication( 1216): at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
E/TiApplication( 1216): at ti.modules.titanium.ui.widget.tableview.TiTableView.onLayout(TiTableView.java:516)
E/TiApplication( 1216): at android.view.View.layout(View.java:7035)
E/TiApplication( 1216): at org.appcelerator.titanium.view.TiCompositeLayout.onLayout(TiCompositeLayout.java:519)
E/TiApplication( 1216): at android.view.View.layout(View.java:7035)
E/TiApplication( 1216): at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
E/TiApplication( 1216): at android.view.View.layout(View.java:7035)
E/TiApplication( 1216): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1249)
E/TiApplication( 1216): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1125)
E/TiApplication( 1216): at android.widget.LinearLayout.onLayout(LinearLayout.java:1042)
E/TiApplication( 1216): at android.view.View.layout(View.java:7035)
E/TiApplication( 1216): at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
E/TiApplication( 1216): at android.view.View.layout(View.java:7035)
E/TiApplication( 1216): at android.view.ViewRoot.performTraversals(ViewRoot.java:1045)
E/TiApplication( 1216): at android.view.ViewRoot.handleMessage(ViewRoot.java:1727)
E/TiApplication( 1216): at android.os.Handler.dispatchMessage(Handler.java:99)
E/TiApplication( 1216): at android.os.Looper.loop(Looper.java:123)
E/TiApplication( 1216): at android.app.ActivityThread.main(ActivityThread.java:4627)
E/TiApplication( 1216): at java.lang.reflect.Method.invokeNative(Native Method)
E/TiApplication( 1216): at java.lang.reflect.Method.invoke(Method.java:521)
E/TiApplication( 1216): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
E/TiApplication( 1216): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
E/TiApplication( 1216): at dalvik.system.NativeStart.main(Native Method)
D/dalvikvm( 1216): GC_FOR_MALLOC freed 4053 objects / 380032 bytes in 77ms