ブログ

Android 10.1inchタブレットのPreferenceActivityで強制終了

Android 10.1インチ タブレットの実機でPreferenceActivity(設定画面)を開くとjava.lang.ClassNotFoundExceptionが発生して強制終了するエラーが頻繁に上がってきました。InstantiationExceptionってのも発生しています。
ちなみに、エミュレーター(PC上の仮想デバイス)では発生しません。

PreferenceActivityは、Eclipseのウィザードで「Setting Activity」を選択して作成したものです。
で、ClassNotFoundExceptionが発生するのは10.1インチの実機のタブレットのみ。弊社で所有している7インチのNexus7では発生しません。

ALWAYS_SIMPLE_PREFS = trueに!

で、結論から言うと、10.1以上のタブレットでもtwo-pane viewみたいな表示にしないで、常にシンプルな方にすれば解消されます。

private static final boolean ALWAYS_SIMPLE_PREFS = false;

ALWAYS_SIMPLE_PREFSをtrueにすれば強制終了は解消されます。

private static final boolean ALWAYS_SIMPLE_PREFS = true;

エラーはこんな感じです。

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.hoge.hogehoge/com.hoge.hogehoge.HogePreference}: android.app.Fragment$InstantiationException: Unable to instantiate fragment com.hoge.hogehoge.HogePreference$GeneralPreferenceFragment: make sure class name exists, is public, and has an empty constructor that is public
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2070)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2095)
at android.app.ActivityThread.access$600(ActivityThread.java:137)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1206)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:213)
at android.app.ActivityThread.main(ActivityThread.java:4791)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556)
at dalvik.system.NativeStart.main(Native Method)
Caused by: android.app.Fragment$InstantiationException: Unable to instantiate fragment com.hoge.hogehoge.HogePreference$GeneralPreferenceFragment: make sure class name exists, is public, and has an empty constructor that is public
at android.app.Fragment.instantiate(Fragment.java:584)
at android.preference.PreferenceActivity.switchToHeaderInner(PreferenceActivity.java:1138)
at android.preference.PreferenceActivity.switchToHeader(PreferenceActivity.java:1171)
at android.preference.PreferenceActivity.onCreate(PreferenceActivity.java:562)
at android.app.Activity.performCreate(Activity.java:5008)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2034)
... 11 more
Caused by: java.lang.ClassNotFoundException: com.hoge.hogehoge.HogePreference$GeneralPreferenceFragment
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61)
at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
at android.app.Fragment.instantiate(Fragment.java:574)
... 17 more

この値を変えると何が変わるかというと、10.1インチ以上のタブレットの設定画面のスタイルが変わります。

20131205

ソースを見てみると、スクリーンのサイズで処理を分岐しているんですが、その辺が関係しているように思います。

/**
 * Helper method to determine if the device has an extra-large screen. For
 * example, 10" tablets are extra-large.
 */
private static boolean isXLargeTablet(Context context) {
	return (context.getResources().getConfiguration().screenLayout
	& Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_XLARGE;
}

根本解決になっている訳ではないのですが、あまり時間もかけたくないので。
SDK ManagerでそのうちSDKをアップデートすれば直っている気もします。

株式会社woodsmallの小林でした。
http://woodsmall.co.jp/

スポンサードリンク

  • このエントリーをはてなブックマークに追加

関連記事

スポンサードリンク

 

30代半ばのオッサンが起業した話

プロフィール

kobayashi-profile
代表取締役CEO 小林 高志
1999年からシステムエンジニアとして、クライアントサーバのシステム構築、WEBシステムの開発、Androidアプリの企画・開発、iPhoneアプリの企画・マーケティング等に携わる。
2012年からカメラマンとして都内のスタジオに従事。
2012年、株式会社woodsmall創業。
2013年5月に代表取締役に就任。
自身の半生を綴った書籍を出版するのが、個人的な目標。
趣味は、カメラ・車・バイク・料理。

代表取締役の略歴はこちら

社長のブログについて

検索してもヒットしなかったアプリ開発に関する技術的な記事から、その時に思ったことなどを素直に書き綴っています。

スポンサードリンク

Facebook

twitter

対応エリア

株式会社woodsmallは、千葉県をはじめ関東エリア、関西エリアでのホームページ制作、アプリ開発(Android、iPhone)、システム開発、チラシ制作を承ります。

【千葉県エリア】
船橋市、市川市、習志野市、浦安市、鎌ヶ谷市、松戸市、柏市、成田市、佐倉市、千葉市中央区、千葉市花見川区、千葉市稲毛区、千葉市美浜区、千葉市若葉区、千葉市緑区、白石市などの千葉県エリア

【東京都エリア】
足立区、荒川区、板橋区、江戸川区、大田区、葛飾区、北区、江東区、品川区、渋谷区、新宿区、杉並区、墨田区、世田谷区、台東区、中央区、千代田区、豊島区、中野区、練馬区、文京区、港区、目黒区などの東京都エリア

【神奈川県エリア】
横浜市、川崎市、藤沢市、茅ヶ崎市、大和市、海老名市、座間市、綾瀬市、平塚市、寒川町、大磯町、二宮町などの神奈川県エリア

【埼玉県エリア】
さいたま市、川口市、蕨市、戸田市などの埼玉県エリア

【関東・関西エリア】
その他、茨城県、栃木県、群馬県の関東エリア、長野県、新潟県の甲信越エリア、大阪府の関西エリア、全国からのご依頼に対応させて頂きます。
(遠方の場合は電話やメール、LINE、Skypeでの打合せとなります。)

ページ上部へ戻る