2013-02-21 5 views
0

Мой виджет дает мне «Проблема с загрузкой виджета» при попытке использовать его, и я не знаю почему.Виджет загрузки виджета виджета TextView

Вот мой код:

Класс

public class DigitalClock extends AppWidgetProvider { 

public void onUpdate(Context context, 
     final AppWidgetManager appWidgetManager, int[] appWidgetIds) { 
    final int N = appWidgetIds.length; 

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

    for (int i = 0; i < N; i++) { 
     int appWidgetId = appWidgetIds[i]; 

     Intent clockIntent = new Intent(context, DeskClock.class); 
     PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, 
       clockIntent, 0); 

     views.setOnClickPendingIntent(R.id.gl, pendingIntent); 

     Timer timer = new Timer(); 
     timer.scheduleAtFixedRate(new UpdateTimeTask(context, 
       appWidgetManager), 1, 1000); 

     appWidgetManager.updateAppWidget(appWidgetId, views); 
    } 
} 

private class UpdateTimeTask extends TimerTask { 
    RemoteViews views; 
    AppWidgetManager appWidgetManager; 
    ComponentName thisWidget; 

    public UpdateTimeTask(Context context, AppWidgetManager appWidgetManager) { 
     this.appWidgetManager = appWidgetManager; 
     views = new RemoteViews(context.getPackageName(), R.id.gl); 
     thisWidget = new ComponentName(context, DigitalClock.class); 
    } 

    @Override 
    public void run() { 
     java.util.Date noteTS = Calendar.getInstance().getTime(); 
     String time = "kk:mm"; 
     String date = "dd MMMMM yyyy"; 

     views.setTextViewText(R.id.tvTime, DateFormat.format(time, noteTS)); 

     views.setTextViewText(R.id.tvDate, DateFormat.format(date, noteTS)); 

     appWidgetManager.updateAppWidget(thisWidget, views); 
    } 

} 

    } 

XML Layout

<?xml version="1.0" encoding="utf-8"?> 
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" > 

<GridLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center" 
    android:orientation="vertical" 
    android:id="@+id/gl" 
    tools:ignore="UselessParent" > 

    <TextView 
     android:id="@+id/tvTime" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/time" 
     android:textColor="#cccccc" 
     android:textSize="80sp" /> 

    <TextView 
     android:id="@+id/tvDate" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal|bottom" 
     android:text="@string/date" 
     android:textColor="#cccccc" 
     android:textSize="20sp" /> 
</GridLayout> 

</GridLayout> 

Manifest

 <receiver 
     android:name="com.timmo.clock.DigitalClock" 
     android:label="@string/app_name_dc" > 
     <intent-filter> 
      <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> 
      <action android:name="com.timmo.clock.ACTION_WIDGET_RECEIVER" /> 
     </intent-filter> 

     <meta-data 
      android:name="android.appwidget.provider" 
      android:resource="@xml/digitalclocksettings" /> 
    </receiver> 

ли я где-то пошло не так? Или метод таймера - неправильный способ обновления моего TextView?

+0

Добавить ** полный ** StackTrace на ваш вопрос. –

+0

(Извините, я новичок в этом) Как мне это сделать? – Timmo

+0

Скопируйте его из Eclipse. Вы указали только часть ошибки выше. –

ответ

0

Существует много виджета для одного приложения. Ваш «thisWidget» ошибочен. Один виджет задаваемая идентификатор виджета, он genarated на Android, и вы получите его:

mAppWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID; 

в виджете активности конфигурации или

ComponentName cn = new ComponentName(context, 
       MoneyWidgetAccountDark.class); 
     int[] appWidgets = appWidgetManager.getAppWidgetIds(cn); 

     for (int appWidget : appWidgets) { 

код вставки для обновления вашего TextView здесь!

Смежные вопросы