とある設定画面用アクティビティの作成中に互換に関する問題に当たりました。
詳細に説明しますと、参考書に載っている以下プログラム
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);
}
}
調べた結果、素のメソッドは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);
}
}
}
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
いまいち理解できず実装している部分もあるのでもしかしたら見当違いのコードを組んでいるのかもしれません.