1

共有設定でテキストサイズを保存しようとしていますが、プロジェクトの実行中にアプリケーションが予期せず停止するコードは次のとおりです:
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>
4

2 に答える 2

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);
 ...
 ...
}
于 2012-06-02T14:36:05.480 に答える
0

ed1 は、Oncreatre の findviewbyId を使用して初期化されません.....

onCreateでコンテンツビューを設定した場合にのみed1を取得できるため

b、ed1、seekbar はすべて、この行「setContentView(R.layout.main);」の後に初期化する必要があります。OncreatreでfindviewbyIdを使用.....

于 2012-06-02T14:35:06.903 に答える