Виджет становится невидимым после переустановки.

У меня есть виджет с действием настройки. Когда пользователь хочет разместить виджет на главном экране, открывается действие настройки, пользователь выбирает содержимое, цвет фона и цвет текста виджета, и все готово. Когда я переустанавливаю приложение, виджет становится невидимым. Он все еще там, но без текста и цвета. См. изображение: enter image description here

Я выложу все свои файлы, а в конце расскажу в чем может быть проблема. Чего я не знаю, так это решения.

widgetconfigure.xml

Это схема действий по настройке. Я не собираюсь публиковать этот xml. Он имеет текстовые представления в макетах.

widget_layout.xml




    
    

    


Часть манифеста, в которой я регистрирую свои действия по настройке и appwidgetprovider:

   
            
                
            
        

        

            
                
            
            
        

xml/widget_info.xml


 

WidgetConfig.java

Это действие по настройке. Пользователь выбирает фон и цвет текста виджета, а также текст из списка, который будет отображаться в виджете. Я собираюсь опубликовать только соответствующую часть:

     AppWidgetManager awm;
        int awID;
        Intent i = getIntent();
        Bundle extras = i.getExtras();
        if (extras != null)
        {
            awID = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
        }
        else
        {
            finish();
        }
        awm = AppWidgetManager.getInstance(c);


//the code from here is in a button onclicklistener that sets the widget.

            RemoteViews views = new RemoteViews(c.getPackageName(), R.layout.widget_layout);
            views.setTextViewText(R.id.tvConfigInput, widgettext);
            views.setTextColor(R.id.tvConfigInput, loadedtextcolor);
            views.setFloat(R.id.tvConfigInput, "setTextSize", int_widgetfontsize);

            Paint p = new Paint(); 
            p.setAntiAlias(true);
            p.setStyle(Style.FILL);
            p.setColor(loadedbgcolor);
            Bitmap bitmap = Bitmap.createBitmap(GetDipsFromPixel(72), GetDipsFromPixel(72), Config.ARGB_8888);
            Canvas canvas = new Canvas(bitmap);
            RectF rect = new RectF(0, 0, GetDipsFromPixel(72), GetDipsFromPixel(72));
            canvas.drawRoundRect(rect, 10, 10, p);
            views.setImageViewBitmap(R.id.ImageView01, bitmap);
            Intent in = new Intent(c, Notepad.class);
            PendingIntent pi = PendingIntent.getActivity(c, 0, in, 0);

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

            awm.updateAppWidget(awID, views);

            finish();

MyWidgetProvider.java

public class MyWidgetProvider extends AppWidgetProvider {

        @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager,
            int[] appWidgetIds) {

        super.onUpdate(context, appWidgetManager, appWidgetIds);
        final int N = appWidgetIds.length;
        for (int i=0; i

Поэтому я почти уверен, что проблема здесь в методе onUpdate, так как я не устанавливаю макет виджета. Я оставил строку с //, чтобы показать, что если я ее добавлю, я получу виджет без фона, но с текстом «Что-то».

Как я должен установить цвет фона, цвет текста виджета и текст TextView для виджета в этом методе? Я их не знаю, их устанавливает пользователь при добавлении виджета. Или что мне делать?

РЕДАКТИРОВАТЬ

Я нашел этоткод и изменил свой следующим образом:

Я добавил saveTitlePref(this, AppWidgetManager.INVALID_APPWIDGET_ID, widgettext);в метод onClick в WidgetConfig.java, поэтому, когда пользователь нажимает OK в конфигурации, виджеттекст будет сохранен с appwidgetid (не знаю, что appwidgetid, так как код использует AppWidgetManager.INVALID_APPWIDGET_ID).

Чтобы это работало, мне нужно следующее:

  static void saveTitlePref(Context context, int appWidgetId, String text) {
            SharedPreferences.Editor prefs = context.getSharedPreferences(PREFS_NAME, 0).edit();
            prefs.putString(PREF_PREFIX_KEY + appWidgetId, text);
            prefs.commit();
        }

В классе MyWidgetProvider я изменил цикл for следующим образом:

final int N = appWidgetIds.length;
    for (int i=0; i

где я добавил

  static String loadTitlePref(Context context, int appWidgetId) {
            SharedPreferences prefs = context.getSharedPreferences(PREFS_NAME, 0);
            String prefix = prefs.getString(PREF_PREFIX_KEY + appWidgetId, null);
            String nothing = "empty";
            if (prefix != null) {
                return prefix;
            } else {
                return nothing;
            }
        }

Это все еще не работает, но становится ближе. Я помещаю два виджета с разными текстами на главный экран, затем переустанавливаю приложение. Теперь у обоих виджетов есть тексты (разумеется, так как я его задал), но у них такой же текст, тот, который я выбрал для 2-го виджета.

Пожалуйста, помогите мне.

10
задан erdomester 17 June 2012 в 14:04
поделиться