私は古いWebOSアプリをAndroidに適応させており、ほぼすべてにphonegapを使用しています(古いコードはjavascriptだったので、これは便利です)が、入力にはネイティブのAutoCompleteTextViewを使用したいと思います。エキゾチックなハイブリッドアプリが原因で、NullPointerExceptionが発生します。しかし、最初から始めましょう。このようにフッターを追加しました(ここで見つけた投稿ごとに)
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.loadUrl("file:///android_asset/www/index.html");
/* ... boring things here ... */
// http://stackoverflow.com/questions/7320910/android-phonegap-with-native-controls
View footer = View.inflate(getContext(), R.layout.footer, null);
root.addView( footer );
// setContentView(root);
// http://www.kwpro.net/blogs/2011/1/10/1651_Android_AutoComplete_Tutorial_Amendment.html
}
私の問題の解決策はsetContentViewである可能性があることを示唆するいくつかのメモをブログで見つけましたが、それは機能していないようです。とにかく、これを使用して(javaインターフェイスを介してwindow.f.setAutoComplete()を介して)javascriptからオートコンプリートテキストを1回だけ設定します。
public void setAutoComplete(String []s) {
Log.d(TAG, "[native]: setting autocomplete text");
AutoCompleteTextView textView = (AutoCompleteTextView) findViewById(R.id.inpu);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.list_item, s);
textView.setAdapter(adapter);
}
とにかく、すべてがうまくいくようです。つまり、選択肢のリストがポップアップ表示され、アプリを強制的に閉じるNullPointerExceptionが発生する前に、選択肢のリストを選択できる場合があります(場合によっては)。これに対処する準備ができていないので、公の場で聞いてみようと思いました。
例外ダンプは次のようになります。
W/dalvikvm( 1832): threadid=11: thread exiting with uncaught exception (group=0x409c01f8)
E/AndroidRuntime( 1832): FATAL EXCEPTION: WebViewCoreThread
E/AndroidRuntime( 1832): java.lang.NullPointerException
E/AndroidRuntime( 1832): at android.widget.AbsListView$RecycleBin.getScrapView(AbsListView.java:5900)
E/AndroidRuntime( 1832): at android.widget.AbsListView.obtainView(AbsListView.java:2003)
E/AndroidRuntime( 1832): at android.widget.ListPopupWindow$DropDownListView.obtainView(ListPopupWindow.java:1168)
E/AndroidRuntime( 1832): at android.widget.ListView.measureHeightOfChildren(ListView.java:1244)
E/AndroidRuntime( 1832): at android.widget.ListPopupWindow.buildDropDown(ListPopupWindow.java:1095)
E/AndroidRuntime( 1832): at android.widget.ListPopupWindow.show(ListPopupWindow.java:524)
E/AndroidRuntime( 1832): at android.widget.AutoCompleteTextView.showDropDown(AutoCompleteTextView.java:1062)
E/AndroidRuntime( 1832): at android.widget.AutoCompleteTextView.updateDropDownForFilter(AutoCompleteTextView.java:939)
E/AndroidRuntime( 1832): at android.widget.AutoCompleteTextView.onFilterComplete(AutoCompleteTextView.java:921)
E/AndroidRuntime( 1832): at android.widget.Filter$ResultsHandler.handleMessage(Filter.java:285)
E/AndroidRuntime( 1832): at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime( 1832): at android.os.Looper.loop(Looper.java:137)
E/AndroidRuntime( 1832): at android.webkit.WebViewCore$WebCoreThread.run(WebViewCore.java:728)
E/AndroidRuntime( 1832): at java.lang.Thread.run(Thread.java:856)
私の推測では、「1つのスレッドだけがUIを実行できる」というパラダイムに遭遇していると思いますが、それが当てはまる場合、それを修正する方法がわかりません。場合、次に何を試すべきかわかりません。