我决定学习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>
嗯,有人可以帮我解决这个问题。我看过一些例子,但我无法弄清楚。如果有人知道一本最好跟随练习的书,那就太好了!谢谢大卫
答案 0 :(得分:0)
方法addPreferencesFromResource(R.XML.Settings)不再适用于PreferenceActivity
它应该。它已被弃用,但仍应有效。
我收到消息不幸的是,数独已停止
我很确定Ed在他的书中涵盖LogCat,这就是你如何更多地了解这类问题。
在这种情况下,您可能会获得ClassCastException
。 Intent
startActivity()
为new Intent(this, Prefs.class)
:
Prefs
但是,PreferenceFragment
是Activity
,而不是<activity>
。您需要将Activity
元素指向PreferenceActivity
,大概是PreferenceFragment
,使用{{1}}。{/ p>
如果有人知道一本能更好地遵循练习的书,那就太棒了!
要求异地资源被认为是Stack Overflow的主题。话虽这么说,我建议你选一本今年出版的书。您使用的这本书是在四年前发布的,这是Android开发中的长时间。