【问题标题】:Android Widget won't have a clickAndroid Widget 不会有点击
【发布时间】:2012-02-12 03:03:43
【问题描述】:

基本上我有这个小部件,它应该在点击后显示一个 Toast。

public class WidgetActivity extends AppWidgetProvider {


 @Override
 public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
     for (int i = 0; i < appWidgetIds.length; i++) {  

         int appWidgetId = appWidgetIds[i];  
         Intent intent = new Intent(context, WidgetActivity.class);  
         intent.setAction("ActionOne");  
         PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0);  
         RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
         views.setOnClickPendingIntent(R.id.LinLayWiget, pendingIntent);  
         appWidgetManager.updateAppWidget(appWidgetId, views);  

     }

 }



 @Override  
 public void onReceive(Context context, Intent intent) {  

     Log.e("YYY","YYYY");
     Toast.makeText(context, "AAA", 1500).show();

     if (intent.getAction().equals("ActionOne")) {  

         Log.e("X","X");
         Toast.makeText(context, "I'm CLICKED!", 1500).show();

        }  
     super.onReceive(context, intent);  
 } 




}

清单:

...
        <receiver android:name="WidgetActivity" android:label="FXMaster" android:icon="@drawable/assiconwi">

            <meta-data
            android:name="android.appwidget.provider"
            android:resource="@xml/widgetprovider" />
                <intent-filter>
                        <action android:name="android.appwidget.action.APPWIDGET_UPDATE"></action>
                </intent-filter>
        </receiver>
...

但是一旦点击了小部件,什么都不会发生。有什么想法可能是错的吗?

谢谢!

【问题讨论】:

  • 你看到它进入了 OnResume 函数吗?像调试一样?如果在那里你看到不同的动作?附言可能最好使用 "ActionOne".equals(intent.getAction()) 来避免可能的空指针:-)
  • 另外我假设你的 AndroidManifest.xml 中有 'package="Fart.Widget"' 对吗?通常最好使用...new RemoteViews(context.getPackageName(), R.layout.widget_layout);
  • 感谢杰基的提示!我已经编辑了代码,见上文,但仍然没有结果。 :(
  • 可能无法点击“LinLayWiget”元素?尝试添加图像或按钮并检查结果?

标签: android


【解决方案1】:

我是来救你的。

1) onUpdate override 应该调用(例如在方法的开头)

super.onUpdate(context, appWidgetManager, appWidgetIds);

2) 因为这条线:

intent.setAction("ActionOne");

您的意图可以被忽略,因此代码不会落入onReceive 中的if 中。添加一个唯一标识符,就像在这篇文章中所做的那样Android keeps caching my intents Extras, how to declare a pending intent that keeps fresh extras?

最后一点,我会更改我的班级名称,因为它实际上不是一个活动。

干杯。

【讨论】:

    猜你喜欢
    • 2012-05-10
    • 1970-01-01
    • 1970-01-01
    • 2020-04-13
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多