2014-10-26 41 views
0

我决定学习android,我买了一本书你好,Android介绍谷歌的移动开发平台,第三版。我开始从本书开始执行我的第一个项目Sudoku,并且直到需要时才开始创建类Prefs extends PreferenceActivity。方法addPreferencesFromResource(R.XML.Settings)不再适用于PreferenceActivity。我试图解决这个问题两天没有成功。 我到目前为止!我读,我可以通过PerformanceFragment管理它,我要尽量请点击此链接:http://developer.android.com/reference/android/preference/PreferenceFragment.html,我也下:Android addPreferencesFromResource

public class Prefs extends PreferenceFragment { 
    @Override 
     public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
      addPreferencesFromResource(R.xml.settings); 
     } 
} 

它会出现一个错误和Eclipse推荐添加@TargetApi(Build.VERSION_CODES.HONEYCOMB) 时我做到了,我可以编译它并运行我的模拟器,但是当我按下菜单和设置时,我收到了消息。不幸的是,数独已经停止。

在mainActivity其他的代码,我有:

package org.example.sudoku; 

import android.support.v7.app.ActionBarActivity; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.content.Intent; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.MenuInflater; 

public class MainActivitySudoku extends ActionBarActivity implements OnClickListener{ 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main_activity_sudoku); 

     //setting up click listener for all buttons 

     View continueButton = findViewById(R.id.continu_button); 
     continueButton.setOnClickListener(this); 
     View newButton = findViewById(R.id.new_button); 
     newButton.setOnClickListener(this); 
     View aboutButton = findViewById(R.id.about_button); 
     aboutButton.setOnClickListener(this); 
     View exitButton = findViewById(R.id.exit_button); 
     exitButton.setOnClickListener(this); 
    } 

    // other codes... 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch(item.getItemId()){ 
     case R.id.settings: 
      startActivity(new Intent(this, Prefs.class)); 
      return true; 
     } 
     return false; 
    } 

数独/ RES/XML/settings.xml的里面我有XML代码:

<?xml version="1.0" encoding="utf-8"?> 
    <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" > 
     <CheckBoxPreference 
      android:key="music" 
      android:title="@string/music_title" 
      android:summary="@string/music_summary" 
      android:defaultValue="true" /> 
     <CheckBoxPreference 
      android:key="hints" 
      android:title="@string/hints_title" 
      android:summary="@string/hints_sammary" 
      android:defaultValue="true" />  

    </PreferenceScreen> 

    Last thing to mention is AndroidManifest Sudoku/bin/AndroidManifest.xml I have following codes: 

    $ <?xml version="1.0" encoding="utf-8"?> 
    <manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="org.example.sudoku" 
     android:versionCode="1" 
     android:versionName="1.0" > 
     <uses-sdk 
      android:minSdkVersion="10" 
      android:targetSdkVersion="21" /> 
     <application 
      android:allowBackup="true" 
      android:icon="@drawable/ic_launcher" 
      android:label="@string/app_name" 
      android:theme="@style/AppTheme" > 
      <activity 
       android:name=".MainActivitySudoku" 
       android:label="@string/app_name" > 
       <intent-filter> 
        <action android:name="android.intent.action.MAIN" /> 

        <category android:name="android.intent.category.LAUNCHER" /> 
       </intent-filter> 
      </activity> 
      <activity android:name=".About" 
       android:label="@string/about_title" 
       android:theme="@android:style/Theme.Dialog" > 
      </activity> 
      <activity android:name=".Prefs" 
       android:label="@string/settings_title" 
      </activity> 
     </application> 
    </manifest> 

那么,任何人都可以请帮我如何解决这个问题。我已经看过一些例子,但我无法弄清楚。此外,如果有人知道一本会更好地遵循练习的书,那会很棒!谢谢大卫

回答

0

的方法addPreferencesFromResource(R.XML.Settings)不PreferenceActivity

它应该工作了。它已被弃用,但它应该仍然有效。

我收到的消息不幸的是,数独已停止

我敢肯定,埃德覆盖在他的书,这是你如何了解更多关于此类问题LogCat

在这种情况下,您可能会收到ClassCastException。您IntentstartActivity()是:

new Intent(this, Prefs.class) 

然而,PrefsPreferenceFragment,而不是一个Activity。您需要将您的<activity>元素指向Activity,推测为PreferenceActivity,其中一个使用您的PreferenceFragment

此外,如果有人知道一本书,会更好地遵循演习,这将是伟大的!

询问非现场资源被认为是堆栈溢出的主题。话虽如此,我建议你选一本今年出版的书。您正在使用的书是四年前发布的,这是Android开发中的一个long时间。

相关问题