2017-02-01 13 views
0

私はPreferenceFregmentに問題があります。何か不足していますか?私が設定する前に、ファイルは正常に動作しました。それから私はヘッダーを含む。私はどこかで何かが恋しいと思うようです。プリファレンスヘッダーを含めると、プリファレンスフラグメントでアクティビティーを開始できません

致命的な例外:メイン プロセス:com.example.tallycounter.tallycounter、PID:25931 java.lang.RuntimeException:活性ComponentInfoを開始できません{com.example.tallycounter.tallycounter/com.example.tallycounter .tallycounter.SettingsActivity}:java.lang.RuntimeException:PreferenceActivityのサブクラスは、フラグメントクラスが有効であることを確認するために、isValidFragment(String)をオーバーライドする必要があります。 com.example.tallycounter.tallycounter.SettingsActivityは、フラグメントcom.example.tallycounter.tallycounter.SettingsActivity $ SettingsFragmentが有効であるかどうかをチェックしていません。アンドロイドでandroid.app.ActivityThread.-wrap12(ActivityThread.java) でandroid.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707) でandroid.app.ActivityThread.performLaunchActivity(ActivityThread.java:2646) で.app.ActivityThread $ H.handleMessage(ActivityThread.java:1460) とandroid.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) とandroidで.app.ActivityThread.main(ActivityThread.java:6077) (java.lang.reflect.Method.invoke)(ネイティブメソッド) at com.an (ZygoteInit.java:755) によって引き起こされる: PreferenceActivityは、Fragmentクラスが有効であることを確認するために、isValidFragment(String)をオーバーライドする必要があります。 com.example.tallycounter.tallycounter.SettingsActivityは、フラグメントcom.example.tallycounter.tallycounter.SettingsActivity $ SettingsFragmentが有効であるかどうかをチェックしていません。 android.preference.PreferenceActivity.switchToHeaderでandroid.preference.PreferenceActivity.switchToHeaderInner(PreferenceActivity.java:1222) でandroid.preference.PreferenceActivity.isValidFragment(PreferenceActivity.java:940) (PreferenceActivity.java:1249) ででandroid.preference.PreferenceActivity.onCreate(PreferenceActivity.java:586) とandroid.app.Activity.performCreate(Activity.java:6662) (android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118) )でアンドロイド。 app.ActivityThread.performLaunchActivity(ActivityThread.java:2599) atアンドロイドでandroid.app.ActivityThread $ H.handleMessage(ActivityThread.java:1460) でandroid.app.ActivityThread.-wrap12(ActivityThread.java) でandroid.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707) .os.Handler.dispatchMessage(Handler.java:102)android.os.Looper.loop(Looper.java:154)の (android.app.ActivityThread.main(ActivityThread.java:6077)) at java.lang .reflect.Method.invoke(ネイティブメソッド) com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:865) at com.android.internal.os.ZygoteInit.main(Zyg w/ActivityManager:強制終了アクティビティcom.example.tallycounter.tallycounter/.SettingsActivity 02-01 09:31:49。514 1506-1991/system_processのW/ActivityManager:フォース仕上げ活動com.example.tallycounter.tallycounter/.SettingsActivity

私のクラス:

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

import java.util.List; 

public class SettingsActivity extends PreferenceActivity { 

    /*@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     getFragmentManager().beginTransaction().replace(android.R.id.content, new SettingsFragment()).commit(); 
    }*/ 
    @Override 
    public void onBuildHeaders(List<Header> target) { 
     loadHeadersFromResource(R.xml.pref_headers, target); 
    } 

    public class SettingsFragment extends PreferenceFragment { 

     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      // addPreferencesFromResource(R.xml.preferences); 

      String settings = getArguments().getString("settings"); 
      if ("pref".equals(settings)) { 
       addPreferencesFromResource(R.xml.preferences); 
      } 
     } 
    } 
} 

のXml preferenceHeaders

<?xml version="1.0" encoding="utf-8"?> 
<preference-headers xmlns:android="http://schemas.android.com/apk/res/android"> 
    <header 
     android:fragment="com.example.xxx.xxx.SettingsActivity$SettingsFragment" 
     android:icon="@mipmap/ic_launcher" 
     android:title="General"> 
     <extra 
      android:name="settings" 
      android:value="pref"> 
     </extra> 
    </header> 
</preference-headers> 
+0

私は "@Overrideを追加しようとしました 保護されたブールisValidFragment(文字列fragmentName){ 戻り値SettingsFragment.class.getName()。equals(fragmentName); }でも動作しません。私は何かを逃したことがありますか? – Mjafko

答えて

0

オーケーまあ私はどこに問題があるのか​​を知る。他の誰かが同じ問題を抱えている場合は、Gona投稿してください。私は嗜好フラグメントのサブクラスを嗜好アクティビティにしました。そして、isValidFregmentは機能しませんでした。それが誰かに役立つことを願っています!

私の好みフラグメントクラス(SettingsFragment.class):

public class SettingsFragment extends PreferenceFragment { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     String settings = getArguments().getString("settings"); 
     if ("xxx".equals(settings)) { 
      addPreferencesFromResource(R.xml.pref_xxx); 
     } else if ("yyy".equals(settings)) { 
      addPreferencesFromResource(R.xml.pref_yyy); 
     } 
    } 
} 

私の好みのアクティビティクラス(SettingsActivity.class):

public class SettingsActivity extends PreferenceActivity { 

    @Override 
    public void onBuildHeaders(List<Header> target) { 
     loadHeadersFromResource(R.xml.pref_headers, target); 
    } 

    @Override 
    protected boolean isValidFragment(String fragmentName) { 
     return SettingsFragment.class.getName().equals(fragmentName); 
    } 
} 

そして、私のXMLの嗜好ヘッダ:

<?xml version="1.0" encoding="utf-8"?> 
<preference-headers xmlns:android="http://schemas.android.com/apk/res/android"> 
    <header 
     android:fragment="com.example.xxx.xxx.SettingsFragment" 
     android:icon="@drawable/ic_pref_milestone" 
     android:title="Xxx"> 
     <extra 
      android:name="settings" 
      android:value="xxx"> 
     </extra> 
    </header> 
    <header 
     android:fragment="com.example.xxx.xxx.SettingsFragment" 
     android:icon="@drawable/ic_pref" 
     android:title="Yyy"> 
     <extra 
      android:name="settings" 
      android:value="yyy"> 
     </extra> 
    </header> 
</preference-headers> 
関連する問題