0
可能重複:
Add several appWidgets with different configuration?獲取不同sharedpreferences爲不同appWidgets
我有顯示一個簡單的TextView,這是可編輯的,如結構活性的edittextfield的小部件。我試圖使用不同的文本配置fx將幾個小部件添加到主屏幕。一個小部件顯示:「買燈......」,另一個顯示:「我愛培根」。
我的問題是,小部件不斷顯示相同的文本,如果我編輯一個小部件,另一個小部件也會改變。我使用sharedpreferences來保存輸入的數據以便以後重新配置。 (我沒有使用PreferenceActivity)
我一直在努力與這個小時,任何幫助將不勝感激。
爲什麼不這項工作:
SharedPreferences sp;
EditText info;
String note;
int appWidgetId;
private void loadPrefs(){
sp = context.getSharedPreferences("widget" + String.valueOf(appWidgetId)
, Context.MODE_PRIVATE);
note = sp.getString("Note", "");
info.setText(note);
}
private void savePrefs(String key, String value){
sp = context.getSharedPreferences("widget" + String.valueOf(appWidgetId)
, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
editor.clear();
editor.putString("Note", info.getText().toString());
editor.commit();
}
,然後我有一個確認按鈕結束配置,它調用savePrefs方法
public void onClick(View v) {
// TODO Auto-generated method stub
savePrefs("Note", info.getText().toString());
的完整代碼配置活動代碼:
import java.io.File;
import android.app.Activity;
import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.text.Spannable;
import android.text.style.StyleSpan;
import android.util.TypedValue;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RemoteViews;
import android.widget.Spinner;
import android.widget.ToggleButton;
public class WidgetConfig extends Activity implements OnClickListener, OnItemSelectedListener {
AppWidgetManager awm;
int awID;
Context context;
EditText info;
Button b;
String note;
int styleStart = -1, cursorLoc = 0;
int appWidgetId;
SharedPreferences sp;
Spinner spinner;
String[] paths = { "10", "20", "30" };
File path = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.widgetconfig);
context = 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(context);
}
...
private void loadPrefs(){
sp = context.getSharedPreferences("widget" + String.valueOf(appWidgetId)
, Context.MODE_PRIVATE);
note = sp.getString("Note", "");
info.setText(note);
}
private void savePrefs(String key, String value){
sp = context.getSharedPreferences("widget" + String.valueOf(appWidgetId)
, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
editor.clear();
editor.putString("Note", info.getText().toString());
editor.commit();
}
public void onClick(View v) {
// TODO Auto-generated method stub
savePrefs("Note", info.getText().toString());
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget);
views.setTextViewText(R.id.tvConfigInput, info.getText());
ComponentName thisWidget = new ComponentName(this, Widget.class);
AppWidgetManager manager = AppWidgetManager.getInstance(this);
manager.updateAppWidget(thisWidget, views);
Intent in = new Intent(context, WidgetConfig.class);
PendingIntent pi = PendingIntent.getActivity(context, 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();
}
}
如果你的意思只是更換sp = context.getSharedPreferences(「widget」+ String.valueOf(appWidgetId),Context.MODE_PRIVATE);在save-和loadPrefs中,使用:sp = context.getSharedPreferences(「widget」+ String.valueOf(awID),Context.MODE_PRIVATE);然後是的,這就是我一直在想的,我之前已經嘗試過,而且它不能解決它。任何其他建議? – Jakob
所以這意味着在創建意圖時不會設置小部件ID。 http://developer.android.com/guide/topics/appwidgets/index.html – smk