Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Eclipse Android error when switching to GUI xml

I get the following error when I switch from xml to GUI for a preferences layout file:

Exception raised during rendering: com.android.layoutlib.bridge.MockView cannot be cast to android.view.ViewGroup Exception details are logged in Window > Show View > Error Log The following classes could not be found: - PreferenceCategory (Fix Build Path, Edit XML) - PreferenceScreen (Fix Build Path, Edit XML)

My xml file looks like this:

<?xml version="1.0" encoding="UTF-8"?>
<PreferenceScreen 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

  <PreferenceCategory
    android:title="Activation">
    <CheckBoxPreference
      android:title="Title1"
      android:defaultValue="false"
      android:key="checkbox1">
    </CheckBoxPreference>
  </PreferenceCategory>

  <PreferenceCategory
    android:title="Option1">
    <PreferenceScreen
        android:title="Set Option">
    <CheckBoxPreference
      android:title="ENABLE OPTION"
      android:defaultValue="false"
      android:summary="text"
      android:key="checkboxOption1">
    </CheckBoxPreference>
    <CheckBoxPreference
      android:title="DISPLAY OPTIONS"
      android:defaultValue="false"
      android:summary="text"
      android:key="checkboxDisplay1">
    </CheckBoxPreference>
    <EditTextPreference
      android:title="OPTION2"
      android:name="Option2"
      android:summary="text"
      android:defaultValue="1"
      android:key="editOption2">
    </EditTextPreference>
    <CheckBoxPreference
      android:title="OPTION3"
      android:defaultValue="false"
      android:summary="text"
      android:key="checkboxOption3">
    </CheckBoxPreference>
    </PreferenceScreen>
  </PreferenceCategory>

  <PreferenceCategory
    android:title="Option4">
    <PreferenceScreen
        android:title="Set Option4">
    <CheckBoxPreference
      android:title="OPTION4"
      android:defaultValue="false"
      android:summary=""
      android:key="checkboxOption4">
    </CheckBoxPreference>
    <CheckBoxPreference
      android:title="OPTION5"
      android:defaultValue="false"
      android:summary="text"
      android:key="checkboxOption5">
    </CheckBoxPreference>
    <EditTextPreference
      android:title="OPTION6"
      android:name="Option6"
      android:summary="text"
      android:defaultValue="1"
      android:key="editOption6">
    </EditTextPreference>
    <EditTextPreference
      android:title="OPTION7"
      android:name="Option7"
      android:summary="text"
      android:defaultValue="1"
      android:key="editOption7">
    </EditTextPreference>
    <EditTextPreference
      android:title="OPTION8"
      android:name="Option8"
      android:summary="text"
      android:defaultValue="1"
      android:key="editOption8">
    </EditTextPreference>
    </PreferenceScreen>
  </PreferenceCategory>

  <PreferenceCategory
    android:title="OPTION9">
    <PreferenceScreen
        android:title="Option9">
    <EditTextPreference
      android:title="Option9"
      android:name="Option9"
      android:summary="text"
      android:defaultValue=""
      android:key="editOption9">
    </EditTextPreference>
    </PreferenceScreen>    
  </PreferenceCategory>

</PreferenceScreen>

Any assistance would be greatly appreciated

like image 571
ctaylor Avatar asked Oct 05 '22 12:10

ctaylor


1 Answers

I had this problem because I treated the preference list like a normal activity. It's actually completely different. First, you need to move the XML file from res/layout to res/xml (in Eclipse, you have to create this folder manually). You also have to use different Java code:

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

public class Settings extends PreferenceActivity { //NOT activity!

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

        // Initialize the preference screen defined in /res/xml/preference.xml
        addPreferencesFromResource(R.xml.preferences); //NOT setContentView
    }

}

You'll get a warning for API level >=11 about addPreferencesFromResource being deprecated. That's because Android wants you to switch to a preference screen based on fragments ("PreferenceFragments"), which is a fair bit more complicated. There's an example here.

like image 187
1'' Avatar answered Oct 10 '22 02:10

1''