0

私は以下のコードをアンドロイドで使用しましたが、アンドロイドエミュレータでは動作しません。PreferenceActivity nougat not working

下記のエラーがあります。

 --------- beginning of crash 
04-17 17:53:48.076 4802-4802/com.package E/AndroidRuntime: FATAL EXCEPTION: main 
                   Process: com.package, PID: 4802 
                   android.view.InflateException: Binary XML file line #30: Error inflating class <unknown> 
                    at android.view.LayoutInflater.createView(LayoutInflater.java:633) 
                    at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:55) 
                    at android.view.LayoutInflater.onCreateView(LayoutInflater.java:682) 
                    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:741) 
                    at android.view.LayoutInflater.inflate(LayoutInflater.java:482) 
                    at android.view.LayoutInflater.inflate(LayoutInflater.java:414) 
                    at android.preference.Preference.onCreateView(Preference.java:510) 
                    at android.preference.Preference.getView(Preference.java:487) 
                    at android.preference.PreferenceGroupAdapter.getView(PreferenceGroupAdapter.java:246) 
                    at android.widget.AbsListView.obtainView(AbsListView.java:2347) 
                    at android.widget.ListView.makeAndAddView(ListView.java:1864) 
                    at android.widget.ListView.fillDown(ListView.java:698) 
                    at android.widget.ListView.fillFromTop(ListView.java:759) 
                    at android.widget.ListView.layoutChildren(ListView.java:1673) 
                    at android.widget.AbsListView.onLayout(AbsListView.java:2151) 
                    at android.view.View.layout(View.java:15671) 
                    at android.view.ViewGroup.layout(ViewGroup.java:5038) 
                    at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703) 
                    at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557) 
                    at android.widget.LinearLayout.onLayout(LinearLayout.java:1466) 
                    at android.view.View.layout(View.java:15671) 
                    at android.view.ViewGroup.layout(ViewGroup.java:5038) 
                    at android.widget.FrameLayout.layoutChildren(FrameLayout.java:579) 
                    at android.widget.FrameLayout.onLayout(FrameLayout.java:514) 
                    at android.view.View.layout(View.java:15671) 
                    at android.view.ViewGroup.layout(ViewGroup.java:5038) 
                    at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703) 
                    at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557) 
                    at android.widget.LinearLayout.onLayout(LinearLayout.java:1466) 
                    at android.view.View.layout(View.java:15671) 
                    at android.view.ViewGroup.layout(ViewGroup.java:5038) 
                    at android.widget.FrameLayout.layoutChildren(FrameLayout.java:579) 
                    at android.widget.FrameLayout.onLayout(FrameLayout.java:514) 
                    at android.view.View.layout(View.java:15671) 
                    at android.view.ViewGroup.layout(ViewGroup.java:5038) 
                    at android.widget.FrameLayout.layoutChildren(FrameLayout.java:579) 
                    at android.widget.FrameLayout.onLayout(FrameLayout.java:514) 
                    at android.view.View.layout(View.java:15671) 
                    at android.view.ViewGroup.layout(ViewGroup.java:5038) 
                    at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703) 
                    at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557) 
                    at android.widget.LinearLayout.onLayout(LinearLayout.java:1466) 
                    at android.view.View.layout(View.java:15671) 
                    at android.view.ViewGroup.layout(ViewGroup.java:5038) 
                    at android.widget.FrameLayout.layoutChildren(FrameLayout.java:579) 
                    at android.widget.FrameLayout.onLayout(FrameLayout.java:514) 
                    at android.view.View.layout(View.java:15671) 
                    at android.view.ViewGroup.layout(ViewGroup.java:5038) 
                    at android.widget.FrameLayout.layoutChildren(FrameLayout.java:579) 
                    at android.widget.FrameLayout.onLayout(FrameLayout.java:514) 
                    at android.view.View.layout(View.java:15671) 
                    at android.view.ViewGroup.layout(ViewGroup.java:5038) 
                    at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703) 
                    at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557) 
                    at android.widget.LinearLayout.onLayout(LinearLayout.java:1466) 
                    at android.view.View.layout(View.java:15671) 
                    at android.view.ViewGroup.layout(ViewGroup.java:5038) 
                    at android.widget.FrameLayout.layoutChildren(FrameLayout.java:579) 
                    at android.widget.FrameLayout.onLayout(FrameLayout.java:514) 
                    at android.view.View.layout(View.java:15671) 
                    at android.view.ViewGroup.layout(ViewGroup.java:5038) 
                    at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2086) 
                    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1843) 
                   at android.view.ViewRootImpl 
04-17 17:53:48.077 1965-2042/system_process W/ActivityManager: Force finishing activity 1 com.package/.MyTabActivity 

以下は私が使用したコードです。

import android.content.SharedPreferences; 
import android.os.Bundle; 
import android.preference.ListPreference; 
import android.preference.Preference; 
import android.preference.PreferenceActivity; 
import android.preference.PreferenceCategory; 
import android.preference.PreferenceFragment; 
import android.util.Log; 

import com.google.android.gms.analytics.GoogleAnalytics; 

import org.jraf.android.backport.switchwidget.SwitchPreference; 

public class SettingsActivity extends PreferenceActivity { 
    private static final String TAG = "SettingsActivity"; 

    SharedPreferences mPrefs; 

    SharedPreferences.Editor editor; 

    PreferenceCategory prefCategoryGenerals; 

    ListPreference pitchLevel, recordingType, visualizerType; 

    SwitchPreference showQuestionTextSwitch, visualizerSwitch; 

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

     //addPreferencesFromResource(R.xml.settings); 
     //getSherlock().getActionBar().setDisplayHomeAsUpEnabled(true); 
     getFragmentManager().beginTransaction().replace(android.R.id.content, new MyPreferenceFragment()).commit(); 

     //mPrefs = getSharedPreferences(Util.PREFS_SETTINGS, MODE_PRIVATE); 
     //editor = mPrefs.edit(); 

    } 
    public static class MyPreferenceFragment extends PreferenceFragment 
    { 
     @Override 
     public void onCreate(final Bundle savedInstanceState) 
     { 
      super.onCreate(savedInstanceState); 
      addPreferencesFromResource(R.xml.settings); 
     } 
    } 
    @Override 
    protected void onResume() { 
     //init(); 
     super.onResume(); 
    } 
    @Override 
    protected void onStart() { 
     //EasyTracker.getInstance().activityStart(this); // Add this method. 
     GoogleAnalytics.getInstance(this).reportActivityStart(this); 
     super.onStart(); 
    } 
    @Override 
    public void onStop() { 
     super.onStop(); 
     // The rest of your onStop() code. 
     //EasyTracker.getInstance().activityStop(this); // Add this method. 
     GoogleAnalytics.getInstance(this).reportActivityStop(this); 
    } 
    Preference.OnPreferenceChangeListener changeListener = new Preference.OnPreferenceChangeListener() { 
     public boolean onPreferenceChange(Preference preference, Object newValue) { 
      if (newValue instanceof String) { 
       editor.putString(preference.getKey(), (String)newValue); 
       editor.commit(); 
      } else if (newValue instanceof Boolean) { 
       editor.putBoolean(preference.getKey(), (Boolean)newValue); 
       editor.commit(); 
      } 
      Log.e(preference.getKey(),newValue.toString()); 
      updatePreferences(); 
      return true; 
     } 
    }; 

    private void init() { 
     prefCategoryGenerals = (PreferenceCategory)findPreference(getString(R.string.settings_general)); 

     pitchLevel = (ListPreference)findPreference(getString(R.string.pitch_duration)); 
     pitchLevel.setOnPreferenceChangeListener(changeListener); 

     recordingType = (ListPreference)findPreference(getString(R.string.recording_type)); 
     recordingType.setOnPreferenceChangeListener(changeListener); 

     visualizerSwitch = (SwitchPreference)findPreference(getString(R.string.visualizer)); 
     visualizerSwitch.setOnPreferenceChangeListener(changeListener); 

     showQuestionTextSwitch = (SwitchPreference)findPreference(getString(R.string.question_text)); 
     showQuestionTextSwitch.setOnPreferenceChangeListener(changeListener); 

     visualizerType = (ListPreference)findPreference(getString(R.string.visualizer_type)); 
     visualizerType.setOnPreferenceChangeListener(changeListener); 

     updatePreferences(); 

    } 

    private void updatePreferences() { 
     boolean recordingTypeVideo = mPrefs.getString(Util.PREFS_RECORDING_TYPE, Util.PREFS_RECORDING_A).equals(Util.PREFS_RECORDING_V); 
     boolean visualizerEnabled = mPrefs.getBoolean(Util.PREFS_SHOW_VISUALIZER, false); 
     boolean visualizerTypeEnabled = !recordingTypeVideo && visualizerEnabled; 
     visualizerType.setEnabled(visualizerTypeEnabled); 
     visualizerSwitch.setEnabled(!recordingTypeVideo); 
    } 

} 

そして、以下はSettings.xmlのコードです。

上記のコード全体は、Android 4.4.4エミュレータとデバイスでも正常に動作します。

+2

質問を編集し、Javaスタックトレース全体を投稿することをお勧めします。また、サードパーティの設定を一時的にコメントアウトし、その中の1つが問題の原因であるかどうかを確認することをお勧めします。 – CommonsWare

+0

はいすべてのライブラリを削除してチェックしても、まだコードが機能していません。完全なスタックトレースを更新します。 –

+2

'org.jraf.android.backport.switchwidget.SwitchPreference'と' com.iq.android.preferences.AboutDialogPref'は有効なクラスですか?パッケージ名を再確認してください。 – azizbekian

答えて

0

最後に私は問題を認識しました。

以下のライブラリに問題があります。これはPreferenceFragmentでは機能しません。

org.jraf:android-switch-backport:2.0.1

だから私は、これに代えてSwitchPreferenceを実装しています。