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(); 

    } 



} 

回答

1

哦酷,所以只需將appWidgetId設置爲awID。或者更簡單,將awID傳遞給您正在調用sharedPreferences的方法。這應該解決它。

+0

如果你的意思只是更換sp = context.getSharedPreferences(「widget」+ String.valueOf(appWidgetId),Context.MODE_PRIVATE);在save-和loadPrefs中,使用:sp = context.getSharedPreferences(「widget」+ String.valueOf(awID),Context.MODE_PRIVATE);然後是的,這就是我一直在想的,我之前已經嘗試過,而且它不能解決它。任何其他建議? – Jakob

+0

所以這意味着在創建意圖時不會設置小部件ID。 http://developer.android.com/guide/topics/appwidgets/index.html – smk