PreferenceActivityの互換に関する問題(java android)

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
LL

PreferenceActivityの互換に関する問題(java android)

#1

投稿記事 by LL » 10年前

現在「基礎からのAndroidプログラミング」:SB Creative書 の 共有プリファレンスと設定画面に関する部分のプログラムを勉強しているのですが、
とある設定画面用アクティビティの作成中に互換に関する問題に当たりました。
詳細に説明しますと、参考書に載っている以下プログラム

コード:

package jp.denpa.preferencessample;

import android.os.Bundle;
import android.preference.PreferenceActivity;

public class SamplePreferenceActivity extends PreferenceActivity {
	@Override
	public void onCreate(Bundle savedInstanceState){
		super.onCreate(savedInstanceState);
		//addPreferencesFromResourceはAPI Level11より非推奨のメソッド
		addPreferencesFromResource(R.xml.sample_preference);
	}
}
注釈文の下のコード[addPreferencesFormResourceメソッド]にてeclipseが使用を推奨しないという警告を発しました。
調べた結果、素のメソッドはAPI Level11 (Android3.0)以降PreferenceActivityクラス自体非推奨になっており、その代価として[PreferenceFragmentクラス]を
使用することを推奨していると分かり、参考書のサンプルコード(上のコード)をPreferenceFragmentに書き換えようとしたのですが、調べてもいまいち実装の仕方が分からなく
困っております。
警告を潰せばいいじゃないかといえばそれまでなのですが、非推奨となっている以上、何かしらの危険を孕んでいるということでもあり、無視するのではなく対処法を学ぶという意味で
何とかしたいと思っております。どうかご助力ください。
ちなみに書き換えたプログラムです↓コンパイルは通りますが、該当コードの実行時にエラーが起き、強制終了します

コード:

package jp.denpa.preferencessample;

import android.os.Bundle;
import android.preference.PreferenceActivity;
import android.preference.PreferenceFragment;

public class SamplePreferenceActivity extends PreferenceFragment {
	@Override
	public void onCreate(Bundle savedInstanceState){
		super.onCreate(savedInstanceState);
		//addPreferencesFromResourceはAPI Level11より非推奨のメソッド
		//addPreferencesFromResource(R.xml.sample_preference);
		getFragmentManager().beginTransaction().replace(android.R.id.content, new HogePrefFrag()).commit();
	}
	
	public static class HogePrefFrag extends PreferenceFragment{
		@Override
		public void onCreate(Bundle saveInstanceState){
			super.onCreate(saveInstanceState);
			addPreferencesFromResource(R.xml.sample_preference);
		}
	}
}
Logcatの吐き出したエラー
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{jp.denpa.preferencessample/jp.denpa.preferencessample.SamplePreferenceActivity}: java.lang.ClassCastException: jp.denpa.preferencessample.SamplePreferenceActivity cannot be cast to android.app.Activity

参考にしたサイト
http://d.hatena.ne.jp/yamanetoshi/20130408/1365419371

http://www.kotemaru.org/2013/10/13/andr ... ample.html

http://72600119.at.webry.info/201309/article_4.html

http://developer.android.com/reference/ ... ivity.html

http://noizy-radio.blogspot.jp/2014/04/android.html

いまいち理解できず実装している部分もあるのでもしかしたら見当違いのコードを組んでいるのかもしれません.

LL

Re: PreferenceActivityの互換に関する問題(java android)

#2

投稿記事 by LL » 10年前

自力で問題解決しました。
親クラスのextends のコードが間違っていただけでした。
修正後のコードです

コード:

package jp.denpa.preferencessample;

import android.app.Activity;
import android.os.Bundle;
import android.preference.PreferenceActivity;
import android.preference.PreferenceFragment;

public class SamplePreferenceActivity extends Activity {
	@Override
	public void onCreate(Bundle savedInstanceState){
		super.onCreate(savedInstanceState);
		//addPreferencesFromResourceはAPI Level11より非推奨のメソッド
		//addPreferencesFromResource(R.xml.sample_preference);
		getFragmentManager().beginTransaction().replace(android.R.id.content, new HogePrefFrag()).commit();
	}
	
	public static class HogePrefFrag extends PreferenceFragment{
		@Override
		public void onCreate(Bundle saveInstanceState){
			super.onCreate(saveInstanceState);
			addPreferencesFromResource(R.xml.sample_preference);
		}
	}
}
お騒がせしました。


閉鎖

“C言語何でも質問掲示板” へ戻る