我正在尝试以共享首选项保存文本大小,而在运行项目时,我的应用程序意外停止,这里是代码:
SharedPreferenceActivity.class
package com.SharedPreference;
import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.SeekBar;
public class SharedPreferenceActivity extends Activity
{
SeekBar seek=(SeekBar)findViewById(R.id.seekBar1);
EditText ed1=(EditText)findViewById(R.id.editText1);
Button b=(Button)findViewById(R.id.button1);
private final String TEXT_VALUE_KEY="textvalue";
private final String FONT_SIZE_KEY="fontsize";
final String MyPref="preference";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
SharedPreferences pref=getSharedPreferences(MyPref,MODE_PRIVATE);
SharedPreferences.Editor editor=pref.edit();
editor.putFloat(FONT_SIZE_KEY,ed1.getTextSize());
editor.putString(TEXT_VALUE_KEY, ed1.getText().toString());
editor.commit();
}
});
SharedPreferences prefs=getSharedPreferences(MyPref, MODE_PRIVATE);
final float fontsize=prefs.getFloat(FONT_SIZE_KEY, 12);
seek.setProgress((int) fontsize);
ed1.setText(prefs.getString(TEXT_VALUE_KEY, ""));
ed1.setTextSize(seek.getProgress());
seek.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
public void onStopTrackingTouch(SeekBar arg0) {
// TODO Auto-generated method stub
}
public void onStartTrackingTouch(SeekBar arg0) {
// TODO Auto-generated method stub
}
public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) {
// TODO Auto-generated method stub
ed1.setTextSize(fontsize);
}
});
}
}
XML文件:
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TableRow >
<SeekBar
android:id="@+id/seekBar1"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</TableRow>
<TableRow >
<EditText
android:id="@+id/editText1"
android:layout_width="match_parent"
android:layout_height="150dp"
android:layout_weight="0.6"
android:ems="10" ></EditText>
</TableRow>
<TableRow >
<Button
android:id="@+id/button1"
android:layout_width="50dp"
android:layout_height="50dp"
android:text="Button" />
</TableRow>
</TableLayout>
答案 0 :(得分:1)
在onCreate
方法中查找视图。
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
seek=(SeekBar)findViewById(R.id.seekBar1);
ed1=(EditText)findViewById(R.id.editText1);
b=(Button)findViewById(R.id.button1);
...
...
}
答案 1 :(得分:0)
ed1未使用Oncreatre中的findviewbyId进行初始化.....
因为只有在onCreate
中设置内容视图时才能获得ed1b,ed1,seekbar all应在此行之后初始化“setContentView(R.layout.main);”在Oncreatre中使用findviewbyId .....