0

構成クラスでエディットテキストとして編集可能なテキストビューを表示するウィジェットを作成しています。また、sharedpreferencesを実装したばかりなので、ユーザーがウィジェットを2回目または3回目などで編集すると、既に入力されたテキストが構成クラスのedittextフィールドに表示されます。

そしてそれは私が推測するように動作します。さて、sharedpreferencesを実装する前は、ウィジェットは構成後に問題なく更新されていました。しかし今、私はテキストを編集し、適用を押しますが、ウィジェットは更新されません。次にウィジェットを再度編集すると、ウィジェットは以前に適用したテキストで更新されます。だから私はあなたが言うことができると思います、それは1つの更新が遅れていると言うことができます。はっきりしているといいのですが、説明するのは少し難しいです。

だから私が間違っているのは、それを機能させることができないということです。どんな助けでも大歓迎です。

コード:

public class WidgetConfig extends Activity implements OnClickListener {


    AppWidgetManager awm;
    int awID;
    Context c;
    EditText info;
    Button b;
    String note;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.widgetconfig);

        c = WidgetConfig.this;
        info = (EditText)findViewById(R.id.etwidgetconfig);
        b = (Button)findViewById(R.id.bwidgetconfig);
        loadPrefs();
        b.setOnClickListener(this);

        //Getting Info about the widget that launched this activity
        Intent i = getIntent();
        Bundle extras = i.getExtras();
        if (extras != null){
            awID = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID,
            AppWidgetManager.INVALID_APPWIDGET_ID );
        }

        awm = AppWidgetManager.getInstance(c);

    }

    private void loadPrefs(){
        SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
        note = sp.getString("NOTE", "DEFAULT");

        info.setText(note);

    }

    private void savePrefs(String key, String value){
        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
        SharedPreferences.Editor editor = preferences.edit();       
        editor.putString(key, value); // value to store
        editor.commit();   

    }

    public void onClick(View v) {
        // TODO Auto-generated method stub

        savePrefs("NOTE", info.getText().toString());

        RemoteViews views = new RemoteViews(c.getPackageName(), R.layout.widget);
        views.setTextViewText(R.id.tvConfigInput, note);


        ComponentName thisWidget = new ComponentName(this, Widget.class);
        AppWidgetManager manager = AppWidgetManager.getInstance(this);
        manager.updateAppWidget(thisWidget, views);

        Intent in = new Intent(c, WidgetConfig.class);
        PendingIntent pi = PendingIntent.getActivity(c, 0, in, PendingIntent.FLAG_UPDATE_CURRENT);


        views.setOnClickPendingIntent(R.id.B_EditAgain, pi);

        awm.updateAppWidget(awID, views);


        Intent result = new Intent();
        result.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, awID);
        setResult(RESULT_OK, result);
        finish();

    }

}
4

1 に答える 1

1

EditText フィールドの値で TextView を実際に更新しているわけではありません。疑似コードは現在次のようになっています。

String note;

onCreate(){
    note = getSharedPref(NOTE);
}

onClick(){
    putSharedPref(info.getText());
    views.setText(note);
}

これにより、次に onCreate を呼び出すまで EditText の値が無視されます。

EditText からのテキストでビューを更新する必要があります。

onClick(){
   putSharedPref(info.getText());
   views.setText(info.getText());
}
于 2012-10-12T22:45:45.653 に答える