Android addPreferencesFromResource

时间:2014-10-26 17:47:26

标签: android android-preferences

我决定学习android,我买了一本书Hello,Android推出谷歌的移动开发平台,第三版。我从书中开始做我的第一个项目Sudoku,我已经设法做到这一点,直到我需要它时创建类Prefs扩展了PreferenceActivity。使用PreferenceActivity,方法addPreferencesFromResource(R.XML.Settings)不再起作用。我试图解决这个问题两天没有成功。 到目前为止我有什么!我读到我可以通过PerformanceFragment管理它,我尝试按照以下链接:http://developer.android.com/reference/android/preference/PreferenceFragment.html我做了以下操作:

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;
    }

在Sudoku / 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> 

嗯,有人可以帮我解决这个问题。我看过一些例子,但我无法弄清楚。如果有人知道一本最好跟随练习的书,那就太好了!谢谢大卫

1 个答案:

答案 0 :(得分:0)

  

方法addPreferencesFromResource(R.XML.Settings)不再适用于PreferenceActivity

它应该。它已被弃用,但仍应有效。

  

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

我很确定Ed在他的书中涵盖LogCat,这就是你如何更多地了解这类问题。

在这种情况下,您可能会获得ClassCastExceptionIntent startActivity()new Intent(this, Prefs.class)

Prefs

但是,PreferenceFragmentActivity,而不是<activity>。您需要将Activity元素指向PreferenceActivity,大概是PreferenceFragment,使用{{1}}。{/ p>

  

如果有人知道一本能更好地遵循练习的书,那就太棒了!

要求异地资源被认为是Stack Overflow的主题。话虽这么说,我建议你选一本今年出版的书。您使用的这本书是在四年前发布的,这是Android开发中的时间。