우선

에러 로그를 보면

page1.xml: com.android.layoutlib.bridge.MockView cannot be cast to android.view.ViewGroup

java.lang.ClassCastException: com.android.layoutlib.bridge.MockView cannot be cast to android.view.ViewGroup

이하 좌르르륵 나오고

 

소스는

 

 

package com.lu2300.optimizer;

 

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.StringTokenizer;

import android.content.SharedPreferences;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.os.Bundle;
import android.preference.CheckBoxPreference;
import android.preference.ListPreference;
import android.preference.PreferenceActivity;
import android.widget.Toast;

public class Page1 extends PreferenceActivity  implements OnSharedPreferenceChangeListener {
    /** Called when the activity is first created. */
 

 private ListPreference mHomeFunc;
    private CheckBoxPreference mHomeWake;
    private ListPreference mSearchFunc;
    private CheckBoxPreference mSearchWake;
   
   
 ArrayList<String> hardArr = new ArrayList<String>();
    boolean bReadFile[] = {false, false};
   
   
   
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // Load the preferences from an XML resource
        addPreferencesFromResource(R.layout.page1);
       

        mHomeFunc = (ListPreference)getPreferenceScreen().findPreference("HomeFunc");
        mHomeWake = (CheckBoxPreference)getPreferenceScreen().findPreference("HomeWake");      
        mSearchFunc = (ListPreference)getPreferenceScreen().findPreference("searchFunc");
        mSearchWake = (CheckBoxPreference)getPreferenceScreen().findPreference("searchWake");      
            
        int isTruth = Truth.findTruth();
  if(isTruth == 0){
   addMsg("시스템 접근 권한이 없어서 적용을  할 수 없습니다.\n설정값 보기만 가능합니다.");
  }
       
        // 1. 외장 하드 키 설정값을 시스템에서 불러옵니다.
        {
         // 1.1 파일 불러오기
   FileInputStream fis; 
   BufferedReader bufferReader = null; 
   try {
    File path = new File("/system/usr/keylayout/ku3700_keypad.kl");
    fis = new FileInputStream(path);
    bufferReader = new BufferedReader(new InputStreamReader(fis));
    String strLine = null;
    while( (strLine = bufferReader.readLine()) != null)
     hardArr.add(strLine + "\n");
    fis.close();
    bReadFile[0] = true;
   } catch (IOException e) {
    bReadFile[0] = false;
   }
   
   // 1.2 구문 해석해서 앱에 적용하기
   if(bReadFile[0] == true){
    for(int i = 0; i < hardArr.size();i++){
     // 각 문자열에서 토큰으로 분리하자
     String originStr = hardArr.get(i);
     StringTokenizer st = new StringTokenizer(originStr, " \t\n");
     String first = null;
     String second = null;
     String third = null;
     String fourth = null;
     
     if(st.hasMoreTokens())
      first = st.nextToken();
     else
      continue;
 
     if(first.toLowerCase().equals("key")){    // 첫번째 토큰
      if(st.hasMoreTokens()){
       second = st.nextToken();     // 두번째 토큰
       if(second.equals("102")){     // home 버튼
        if(st.hasMoreTokens()){
         third = st.nextToken();    // 세번째 토큰
         mHomeFunc.setValue(third);   // 특정 기능
         if(st.hasMoreTokens()){    // WAKE
          fourth = st.nextToken();
          if(fourth.toUpperCase().equals("WAKE_DROPPED") || fourth.toUpperCase().equals("WAKE") ){
           mHomeWake.setChecked(true);
          }else{
           mHomeWake.setChecked(false);
          }
         }else{
          mHomeWake.setChecked(false);
         }
         
        }else{
         addMsg("잘못된 키 설정입니다.\n 설정된 값이 없습니다.");
        }
       }else if(second.equals("217")){  // search 버튼
        if(st.hasMoreTokens()){
         third = st.nextToken();
         mSearchFunc.setValue(third);
         if(st.hasMoreTokens()){    // WAKE
          fourth = st.nextToken();
          if(fourth.toUpperCase().equals("WAKE_DROPPED") || fourth.toUpperCase().equals("WAKE") ){
           mSearchWake.setChecked(true);
          }else{
           mSearchWake.setChecked(false);
          }
         }else{
          mSearchWake.setChecked(false);
         }
        }else{
         addMsg("잘못된 키 설정입니다.\n 설정된 값이 없습니다.");
        }
       }else if(second.equals("231")){  // CALL 버튼
         // CALL 버튼은 설정 없음
       }
      }else{
       addMsg("알 수 없는 키 설정이 있습니다.\n" + hardArr.get(i) + "\n패치시 이 라인은 삭제됩니다."); // 첫번째가 키인데 없다면? 어헝헝헝
      }
     }
    }
   }
        }
       
       
       
       
       
        if(bReadFile[0] == true && bReadFile[0] == true){
//      addMsg("시스템 -> 앱 : 설정값을 읽어왔습니다.");
        }else{
      addMsg("시스템 -> 앱 : 설정값 읽기 실패했습니다.\n앱에서 설정값을 읽어옵니다.");
        }
    }

 @Override
 protected void onResume() {
  super.onResume();
     // Setup the initial values
  mHomeFunc.setSummary("저장 값 : " + getPreferenceScreen().getSharedPreferences().getString("homeFunc", ""));
  mSearchFunc.setSummary("저장 값 : " + getPreferenceScreen().getSharedPreferences().getString("searchFunc", ""));
  // Set up a listener whenever a key changes
  getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
 }

 @Override
 protected void onPause() {
  super.onPause();
  getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
 }

 @Override
 public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
   String key) {
  if (key.equals("homeFunc")) {
   mHomeFunc.setSummary("저장 값 : " + sharedPreferences.getString("homeFunc", ""));
  }else if (key.equals("searchFunc")) {
   mSearchFunc.setSummary("저장 값 : " + sharedPreferences.getString("searchFunc", ""));
  }
 }
 private void addMsg(String str){
  Toast.makeText(this, str, Toast.LENGTH_SHORT).show();
 }

}