解决方案 »
- 界面效果
- 更改程序的默认启动activity,出错,求大神指导
- Menu设置图标问题?
- 请问, 想在android --> 设置--> 显示中, 加一些自定义的选项, 这个如何加? (要在什么文件中加)
- android2.3.4横屏转竖屏的问题
- 高分求助!android webview为什么不显示网络摄像机传过来的图像
- 求助。。急,Android平台上的开发如何获取声音的频率
- 大家好,手机操作有支持启动时运行存储卡里的程序的吗?
- zip解压出错:java.util.zip.ZipException: EOCD not found; not a Zip archive?
- 谁能提供一下Android4.1.2系统的签名工具
- android新手求入职场的android大牛手机适配问题
- actionbar+viewpager对控件监听问题
当你new EPreferenceActivity() 的时候才初始化父类的东西。 getResources(); 方法依赖上下文的初始化。
import cn.elapser.elapserime.data.EDictionaryData;
import cn.elapser.elapserime.data.EKeylayoutData;
import cn.elapser.elapserime.file.EAssetsFile;
import cn.elapser.elapserime.file.EDataFile;
import cn.elapser.elapserime.file.EFile;
import cn.elapser.elapserime.file.ESDCardFile;import android.content.Intent;
import android.content.res.Resources;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.preference.PreferenceScreen;
import android.widget.Toast;public class EPreferenceActivity extends PreferenceActivity implements
Preference.OnPreferenceClickListener {
private static final String[] cPreferenceKeys = { "keylayout_import",
"keylayout_outport", "keylayout_reset", "dictionary_import",
"dictionary_outport", "dictionary_reset", "reboot_reboot" };
private final CPreference.COperator cImportor = new CPreference.CImportOperator();
private final CPreference.COperator cOutportor = new CPreference.COutportOperator();
private final EKeylayoutData cKeylayoutData = new EKeylayoutData();
private final EDictionaryData cDictionaryData = new EDictionaryData();
private final EAssetsFile cAssetsFile = new EAssetsFile(this);
private final EDataFile cDataFile = new EDataFile(this);
private final ESDCardFile cSDCardFile = new ESDCardFile(this); private Intent mIntent;
private PreferenceScreen[] mPreferences; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mIntent = new Intent("cn.elapser.elapserime.EInputMethodService");
addPreferencesFromResource(R.xml.preference);
mPreferences = new PreferenceScreen[cPreferenceKeys.length];
for (int i = 0; i < cPreferenceKeys.length; i++) {
mPreferences[i] = (PreferenceScreen) findPreference(cPreferenceKeys[i]);
mPreferences[i].setOnPreferenceClickListener(this);
}
} @Override
public boolean onPreferenceClick(Preference preference) {
final Resources cResource = getResources();
final String cImtportTitle = cResource
.getString(R.string.preference_import_titile);
final String cOutportTitle = cResource
.getString(R.string.preference_outport_titile);
final String cResetTitle = cResource
.getString(R.string.preference_reset_titile);
final String cRebotTitle = cResource
.getString(R.string.preference_reboot_rebooting);
final String cOperateSucceeded = cResource
.getString(R.string.preference_operate_succeeded);
final String cOperateFailed = cResource
.getString(R.string.preference_operate_failed);
final CPreference[] cPreferences = {
new CPreference(cImportor, cKeylayoutData, cSDCardFile,
cDataFile, cImtportTitle),
new CPreference(cOutportor, cKeylayoutData, cDataFile,
cSDCardFile, cOutportTitle),
new CPreference(cImportor, cKeylayoutData, cAssetsFile,
cDataFile, cResetTitle),
new CPreference(cImportor, cDictionaryData, cSDCardFile,
cDataFile, cImtportTitle),
new CPreference(cOutportor, cDictionaryData, cDataFile,
cSDCardFile, cOutportTitle),
new CPreference(cImportor, cDictionaryData, cAssetsFile,
cDataFile, cResetTitle) };
final String[] cOperateResults = { cOperateSucceeded, cOperateFailed };
String text = null;
do {
int i;
for (i = 0; i < 6 && mPreferences[i] != preference; i++)
;
if (i < 6) {
int result = cPreferences[i].operate();
if (result != 0)
result = 1;
text = cPreferences[i].pTitle + cOperateResults[result];
} else if (mPreferences[6] == preference) {
text = cRebotTitle;
mIntent.putExtra("Rebooting", true);
sendBroadcast(mIntent);
}
} while (false);
if (text != null) {
Toast toast = Toast.makeText(this, text, Toast.LENGTH_SHORT);
toast.show();
return true;
}
return false;
} private static class CPreference {
public COperator pOperator;
public EData pData;
public EFile pReader;
public EFile pWriter;
public String pTitle; public CPreference(COperator operator, EData data, EFile reader,
EFile writer, String title) {
pOperator = operator;
pData = data;
pReader = reader;
pWriter = writer;
pTitle = title;
} public int operate() {
return pOperator.operate(pData, pReader, pWriter);
} public abstract static class COperator {
public int operate(EData data, EFile reader, EFile writer) {
return 0;
}
} public static class CImportOperator extends COperator {
@Override
public int operate(EData data, EFile reader, EFile writer) {
return EData.importFile(data, reader, writer);
}
} public static class COutportOperator extends COperator {
@Override
public int operate(EData data, EFile reader, EFile writer) {
return EData.outportFile(data, reader, writer);
}
}
}
}
我想把所有final变量变成EPreferenceActivity的成员变量
但是android源代码的解决方案都是改成普通成员变量
所以无所谓了