1

我有一個應用程序,其widged基本上具有一個TextView。我也有 一個活動,它顯示內部創建的字符串的文本視圖。現在 我有在練習1一個按鈕的onClick將發送數據(串 appWidget類),我試過putExtra和getExtra方法,並共享 喜好方法,即時通訊有點糊塗了要使用的第一!獲得一個字符串經由GetExtras到AppWidget(或)共享prefrences

下面是我的一些投入更加清晰。 活動1:

final String addwidget = 
((TextView)findViewById(R.id.verse)).getText().toString(); 
Intent widgetIntent = new Intent(MyScheduledActivity.this, 
MainWidget.class); 
widgetIntent.putExtra("widgetVerse", addwidget); 

AppWidget:

public class MainWidget extends AppWidgetProvider { 

     RemoteViews views; 
     public static String verseFromFav; 
     private Bundle getVerseData; 

     @Override 
     public void onReceive(Context context, Intent intent) { 

       getVerseData = intent.getExtras(); 
       verseFromFav = getVerseData.getString("widgetVerse"); 
       super.onReceive(context, intent); 
     } 

     @Override 
     public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { 
      final int N = appWidgetIds.length; 
      for (int i=0; i<N; i++) { 

      views = new RemoteViews(context.getPackageName(),R.layout.widget_layout); 

      if(verseFromFav == null){ 
       verseFromFav = "no verse"; 
      } 
      views.setTextViewText(R.id.widgetVerse, verseFromFav); 

      ComponentName thisWidget = new ComponentName(context, MainWidget.class); 

AppWidgetManager.getInstance(context).updateAppWidget(thisWidget, views); 

     appWidgetManager.updateAppWidget(appWidgetIds, views); 

     } 
     super.onUpdate(context, appWidgetManager, appWidgetIds); 
     } 
} 

(應用程序小部件顯示「無詩」曰NULL) 任何一個可以幫助我如何在這裏顯示的字符串 上的基本思路。請。提前致謝。

回答

0

的onUpdate將始終調用(有時是多次),從而利用了火實用程序或控制器類,並盡一切該班的工作。

因此,在您的應用程序窗口小部件,你可能具有唯一的事情,我的全部展現在一個TextView正在更新一個字符串,是的onUpdate()方法的東西。

@Override 
public void onUpdate(final Context context, final AppWidgetManager appWidgetManager, final int[] appWidgetIds) { 
    // Need this here to set the initial state of the app widget 
    final AppWidgetController _actrlr = new AppWidgetController(context); 
    _actrlr.updateAppWidgetUI(this); 

    super.onUpdate(context, appWidgetManager, appWidgetIds); 
} 

然後在AppWidgetController類,你可能有這樣的事情...

public final void updateAppWidgetUI(final Context context) { 

     final AppWidgetManager _manager = AppWidgetManager.getInstance(context ); 
     final ComponentName _componentName = new ComponentName(context, com.your.namespace.theprovidername.class); 
     final int[] appWidgetIds = _manager.getAppWidgetIds(_componentName); 

     for (final int i : appWidgetIds) { 

      final RemoteViews _rv = new RemoteViews(context.getPackageName(), R.layout.appwidget_xml_layout_file); 

      if(somethingIsTrue) { 
       _rv.setTextViewText(R.id.textViewThatYouWantToUpdate, "The text that you wish to display if something is TRUE"); 
      } else { 
       _rv.setTextViewText(R.id.textViewThatYouWantToUpdate, "The text that you wish to display if something is FALSE"); 
      } 

      _manager.updateAppWidget(i, _rv); 
     } 
    } 

遠程視窗setTextViewText()

http://developer.android.com/reference/android/widget/RemoteViews.html#setTextViewText(int,java.lang.CharSequence中)

+0

編輯,因爲我從我自己的應用程序複製和粘貼時忘記從setInt更改爲setTextViewText – rf43

+0

是的,工作..!非常感謝! – Wesley

0

我會建議你使用sharedpreference這一點。它會讓你更好。

SharedPreferences settings = 
getSharedPreferences("MyWigdetPreferences", MODE_WORLD_READABLE); 

SharedPreferences.Editor prefEditor = Settings.edit(); 
prefEditor.putString("widgetVerse", addwidget);  
prefEditor.commit(); 

然後在mainWidget活動應拔..

SharedPreferences settings = 
getSharedPreferences("MyWigdetPreferences", MODE_WORLD_READABLE); 
String verse = settings.getString("widgetVerse"); 

應該這樣做。編輯

而不是

@Override 
    public void onReceive(Context context, Intent intent) { 

      getVerseData = intent.getExtras(); 
      verseFromFav = getVerseData.getString("widgetVerse"); 
      super.onReceive(context, intent); 
    } 

嘗試

@Override 
    public void onReceive(Context context, Intent intent) { 

      getVerseData = getIntent.getExtras(); 
      verseFromFav = getVerseData.getString("widgetVerse"); 
      super.onReceive(context, intent); 
    } 
+0

您好,感謝快速響應:)我應該在哪裏把它放在MainWidget中? (請注意:MainWidget不是一個活動,它的AppWidgetProvider,第二個代碼並沒有在那裏工作!任何幫助 – Wesley

+0

看看我的編輯 –

+0

恐怕它拋出一個錯誤太多,我已經使用get和以前太把羣衆演員? ,你已經更新的代碼在Activity類上工作正常,但是我一直在搜索AppWidget,它通常被部署爲只讀接口,它充當底層活動的店面。getIntent中出現錯誤「getIntent can not be解決方法 – Wesley