我在android中创建了一个小部件,每当我点击Widget TextView
一个服务开始时,我同时想要更改右侧显示的图标。
我可以使用
在Widget TextView
上设置onclick
remoteViews.setOnClickPendingIntent(R.id.widgetTxt,pendingIntent);
但是当TextView获得点击次数
时,我不知道我可以在哪里更改图标图像
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,int[] appWidgetIds) {
// Here i am trying to set a onclick over TextView
Intent intent = new Intent(context,MyService.class);
PendingIntent pendingIntent = PendingIntent.getService(context,0 ,
intent, 0);
remoteViews.setOnClickPendingIntent(R.id.MyWidgetTxt,pendingIntent);
}
当点击一个图标时,它也会改变,我已将其代码设置为onReceive
答案 0 :(得分:3)
试试这个:
在manifest.xml中
<receiver android:name="TestwidgetProvider"
android:label="@string/widget_title" android:exported="false" android:icon="@drawable/test">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
<action android:name="com.imranandroid.demo.ACTION_ON_ImG_CLICK"/>
<action android:name="android.appwidget.action.APPWIDGET_DELETED"/>
</intent-filter>
<meta-data android:name="android.appwidget.provider"
android:resource="@xml/widget_info" />
</receiver>
在 AppWidgetProvider.java :
中 public class TestwidgetProvider extends AppWidgetProvider {
public static final String TAG_IMAGE_CLICK = "com.imranandroid.demo.ACTION_ON_ImG_CLICK";
public static RemoteViews rview;
public static int ii=0;
@Override
public void onUpdate(Context paramContext, AppWidgetManager appWidgetManager,
int[] appWidgetIds){
//REMOVE YOUR CODE FROM HERE
updateWidgetState(paramContext, "");
}
@Override
public void onReceive(Context paramContext, Intent paramIntent)
{
String str = paramIntent.getAction();
if (paramIntent.getAction().equals(TAG_IMAGE_CLICK)) {
updateWidgetState(paramContext, str);
}
else
{
super.onReceive(paramContext, paramIntent);
}
}
static void updateWidgetState(Context paramContext, String paramString)
{
RemoteViews localRemoteViews = buildUpdate(paramContext, paramString); //CALL HERE
ComponentName localComponentName = new ComponentName(paramContext, TestwidgetProvider.class);
AppWidgetManager.getInstance(paramContext).updateAppWidget(localComponentName, localRemoteViews);
}
private static RemoteViews buildUpdate(Context paramContext, String paramString)
{
rview = new RemoteViews(paramContext.getPackageName(), R.layout.widget_layoutmain);
Intent active = new Intent(paramContext, TestwidgetProvider.class); //YOUR WIDGET NAME
active.setAction(TAG_IMAGE_CLICK);
PendingIntent actionPendingIntent = PendingIntent.getBroadcast(paramContext, 0, active, 0);
rview.setOnClickPendingIntent(R.id.MyWidgetTxt, actionPendingIntent);
if (paramString.equals(TAG_IMAGE_CLICK)) {
if(ii==0)
{
rview.setImageViewResource(R.id.ImageView01a, R.drawable.off);
ii=1;
}
else
{
rview.setImageViewResource(R.id.ImageView01a, R.drawable.on);
ii=0;
}
}
return rview;
}
}