问题
I'm trying out to save the text size in shared preference ,while running the project my application stops unexpectedly here is the code :
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 file:
<?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>
回答1:
find the views in your onCreate
method.
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);
...
...
}
回答2:
ed1 is not initialize using findviewbyId in Oncreatre.....
as you can only get ed1 when you have set the content view in onCreate
b, ed1, seekbar all should be initialize after this line " setContentView(R.layout.main);" using findviewbyId in Oncreatre.....
来源:https://stackoverflow.com/questions/10863119/saving-text-size-in-shared-preference