Получение строки в AppWidget через общие настройки GetExtras (или) - PullRequest
1 голос
/ 26 сентября 2011

У меня есть приложение, которое в основном имеет текстовое представление. у меня тоже есть деятельность, которая отображает текстовое представление из строки, созданной внутри. Сейчас У меня есть кнопка в Деятельности 1, которая onClick отправит данные (строка класс appWidget) Я попробовал методы putExtra и getExtra, а также Shared метод предпочтений, я немного запутался, чтобы использовать, который сначала!

Вот некоторые материалы от меня для большей ясности. Activity1:

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

(ВИДЖЕТ ПРИЛОЖЕНИЯ показывает «нет стиха», который читает ноль) Может ли кто-нибудь помочь мне с основной идеей о том, как отображать строку Вот. Пожалуйста. заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 28 сентября 2011

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

RemoteView setTextViewText ()

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

0 голосов
/ 26 сентября 2011

Я бы посоветовал вам использовать 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);
   }
...