2

我正在尝试基于通用代码“LoremWidget”实现小部件,请参见Github

问题是点击不起作用

在 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 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是唯一的方法吗?

4

1 回答 1

1

您可能会考虑阅读这些示例的书,特别是涵盖此示例的章节,因为您会在那里找到答案。

为什么小部件不更新

因为您正在创建一个指向服务的活动,从我所看到的PendingIntentIntent

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

这与样本的作用不符

这是在小部件中实现简单点击的正确方法吗,还有其他方法吗,这个widgetfactory是唯一的方法吗?

这是您处理AdapterView应用小部件中使用的点击的方式。

于 2013-05-15T18:58:35.960 回答