2013-05-15 4 views
2

Я пытаюсь реализовать виджет на основе CommonsWare кода 'LoremWidget', см here на GithubWidget Click not Working?

Проблема заключается в том, что щелчок не работает

на WidgetUpdate, так же как WidgetProvider

for (int appWidgetId : appWidgetIds) 
{ 
RemoteViews remoteView = new RemoteViews(context.getPackageName(), R.layout.widget); 
Intent configIntent = new Intent(context, WidgetService.class); 
PendingIntent configPendingIntent =PendingIntent.getActivity(context, 0, configIntent, 0); 
remoteView.setPendingIntentTemplate(R.id.imgNext, configPendingIntent); 
appWidgetManager.updateAppWidget(appWidgetId, remoteView); 
} 

в манифесте, аналогично Manifest

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.demo.widget" 
    android:versionCode="1" 
    android:versionName="1.0" > 
<uses-sdk 
    android:minSdkVersion="11" 
    android:targetSdkVersion="17" /> 

<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name=".WidgetConfig" 
     android:label="@string/app_name" > 
     <intent-filter> 
       <action 
       android:name="android.appwidget.action.APPWIDGET_CONFIGURE" /> 
     </intent-filter> 
    </activity> 
    <receiver 
     android:name="BasicWidgetProvider"> 
     <intent-filter> 
      <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> 
     </intent-filter> 
     <meta-data 
      android:name="android.appwidget.provider" 
      android:resource="@xml/widget_info" /> 
    </receiver> 
     <service android:name="WidgetService" 
       android:permission="android.permission.BIND_REMOTEVIEWS" /> 
</application> 
</manifest> 

WidgetService, similar to WidgetService

public class WidgetService extends RemoteViewsService 
{ 
    private static final String TAG=WidgetService.class.getName(); 
    @Override 
    public RemoteViewsFactory onGetViewFactory(Intent intent) 
    { 
     Log.d(TAG, "inside remoteview"); 
     return(new WidgetFactory(this.getApplicationContext(), 
            intent)); 
    } 
} 

WidgetFactory getView method as here

public RemoteViews getViewAt(int arg0) 
    { 
     Log.d(TAG, "inside the getview at"); 
     RemoteViews row=new RemoteViews(ctxt.getPackageName(), R.layout.widget); 
      row.setViewVisibility(R.id.imgNext, View.INVISIBLE); 
     Intent i=new Intent(); 
     Bundle extras=new Bundle(); 
     return(row); 
    } 

Questions:

1. why is widget not updating, no logs are generated infact the only log relevant to my code is

05-15 23:24:27.648: I/ActivityManager(161): START {flg=0x10000000 cmp=com.demo.widget/.WidgetService bnds=[509,299][547,337]} from pid -1

2. Это правильный способ реализовать простой щелчок в виджетах, есть ли другой способ для него, является ли это widgetfactory единственным способом?

+0

Работает ли образец LoremWidget, когда вы используете его без изменений? – CommonsWare

+0

@CommonsWare Да, он работает, он отображает список слов и отображает тост при нажатии на элементы списка –

ответ

1

Возможно, вы прочитаете the book for these samples, в частности главу, которая охватывает этот образец, так как вы нашли бы свои ответы там.

почему виджет не обновляется

Поскольку вы создаете деятельность PendingIntent, с Intent, что указывает на услугу, от того, что я вижу:

Intent configIntent = new Intent(context, WidgetService.class); 
PendingIntent configPendingIntent =PendingIntent.getActivity(context, 0, configIntent, 0); 
remoteView.setPendingIntentTemplate(R.id.imgNext, configPendingIntent); 

Это не соответствует what the sample does.

Это правильный способ реализовать простой щелчок в виджетах, есть ли другой способ для него, является ли это widgetfactory единственным способом?

Как обрабатывать клики в AdapterView, используемых в виджетах приложений.

+0

спасибо, я понял часть об адаптивном представлении, исправляя его. Во-вторых, я не хочу выполнять/загружать другую активность для тоста сообщения, я хочу обновить сам виджет по щелчку? будет ли этот метод достаточным и как /, пожалуйста, обновите его код? –

+0

@ AkhilJain: вы можете обновить виджет приложения в любое время, используя 'updateAppWidget()' в 'AppWidgetManager'. – CommonsWare

+0

У виджета есть еще какой-то другой код, который уже обновляет представление каждые 5/10 секунд, в зависимости от установленного таймера, представление обновляется (с помощью 'updateAppWidget()'), но я хочу, чтобы он обновлялся, когда клик сделан, я извините, я новичок в разработке виджета, виджет ничего не делает при обновлении в методе 'getView' также здесь вы на самом деле вызываете другое действие для отображения другого действия с помощью' PendingIntent.getActivity() ', который запускает другое действие, который я не хочу –