Android的Appwidget TextView中没有更新(Android Appwidget textview not updating)

Android的Appwidget TextView中没有更新(Android Appwidget textview not updating)

 Android IT屋  2016/2/23 11:10:12 
问 题

Hi im having a very weird problem with my android widget, ive looked extensivly in many places but I cant seem to figure out whats wrong. basically im calling a pendingintent broadcast in my widget and in sucessfully catching that intent in the onrecivie method.

However in the onRecive method, when I try to set the text using RemoteViews for my component, the text does not update nor is any error called. I have attached my code below, any help would be great.

Thanks, M

 package com.android.FirstWidget;import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ImageButton;
import android.widget.RemoteViews;

public class ExampleAppWidgetProvider extends AppWidgetProvider {

    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub
        Log.e("ds",intent.getAction());
        Log.e("f","f");
        if(intent.getAction().contains("1")){

            RemoteViews views =  new RemoteViews(context.getPackageName(), R.layout.wid);
            views.setTextViewText(R.id.textView1,"heyheyhey");
            Log.e("fssss","sssf");
        }
        super.onReceive(context, intent);
    }

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

        // Perform this loop procedure for each App Widget that belongs to this provider
        for (int i=0; i<N; i++) {
            int appWidgetId = appWidgetIds[i];

            // Create an Intent to launch ExampleActivity
            Intent intent = new Intent(context, ExampleAppWidgetProvider.class);
            intent.setAction("1");
            PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
            // Get the layout for the App Widget and attach an on-click listener
            // to the button
            RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.wid);
            views.setOnClickPendingIntent(R.id.arrowLeft, pendingIntent);
           views.setOnClickPendingIntent(R.id.arrowRight, pendingIntent);
//views.set
            // Tell the AppWidgetManager to perform an update on the current app widget
            appWidgetManager.updateAppWidget(appWidgetId, views);

        } 

    }
}
解决方案

You need to add couple of lines to the end of onRecieve method.... it should go like this..

 package com.android.FirstWidget;import android.app.PendingIntent;
 import android.appwidget.AppWidgetManager;
 import android.appwidget.AppWidgetProvider;
 import android.content.Context;
 import android.content.Intent;
 import android.os.Bundle;
 import android.util.Log;
 import android.view.View;
 import android.widget.ImageButton;
 import android.widget.RemoteViews;

 public class ExampleAppWidgetProvider extends AppWidgetProvider {


     @Override
     public void onReceive(Context context, Intent intent) {
         // TODO Auto-generated method stub
         Log.e("ds",intent.getAction());
         Log.e("f","f");

         RemoteViews views =  new RemoteViews(context.getPackageName(), R.layout.wid);
         if(intent.getAction().contains("arrow_left")){
             views.setTextViewText(R.id.textView1,"left");
             Log.e("fssss","sssf");
         }
         else if(intent.getAction().contains("arrow_right")){
             views.setTextViewText(R.id.textView1,"right");
             Log.e("fssss","sssf");
         }

         else {
             super.onReceive(context, intent);
         }
         ComponentName componentName = new ComponentName(context, ExampleAppWidgetProvider.class);
         AppWidgetManager.getInstance(context).updateAppWidget(componentName, views);
     }

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

        // Perform this loop procedure for each App Widget that belongs to this provider
        for (int i=0; i<N; i++) {
            int appWidgetId = appWidgetIds[i];

            // Create an Intent to launch ExampleActivity
            Intent intent = new Intent(context, ExampleAppWidgetProvider.class);
            intent.setAction("arrow_left");
            PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
            // Get the layout for the App Widget and attach an on-click listener
            // to the button
            RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.wid);
            views.setOnClickPendingIntent(R.id.arrowLeft, pendingIntent);

            intent = new Intent(context, ExampleAppWidgetProvider.class);
            intent.setAction("arrow_right");
            pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 
            views.setOnClickPendingIntent(R.id.arrowRight, pendingIntent);
//views.set
            // Tell the AppWidgetManager to perform an update on the current app widget
            appWidgetManager.updateAppWidget(appWidgetId, views);

        } 

    }
}

Also though I believe what you have coded should work, but if not you can try putting the intent action for the buttons in the manifest file. It should go like this

<intent-filter >
        <action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>
        <action android:name="com.android.FirstWidget.arrow_left"/>
        <action android:name="com.android.FirstWidget.arrow_right"/>
</intent-filter>

I guess this should work now. I just happen to stumble into this problem myself, and found solution here : Clickable widgets in android

本文地址:IT屋 » Android Appwidget textview not updating

问 题

有我的Andr​​oid小工具一个很奇怪的问题嗨即时消息,香港专业教育学院extensivly看了很多地方,但我似乎无法弄清楚什么是错。基本上即时调用我的窗口小部件,并在成功地抓住这一意图在onrecivie方法的PendingIntent播出。

然而,在onRecive方法,当我尝试设置使用RemoteViews我的组件中的文本,该文本不更新,也不是所谓的任何错误。我重视我的低于code,任何帮助将是巨大的。

谢谢,
中号

 包com.android.FirstWidget;进口android.app.PendingIntent;
进口android.appwidget.AppWidgetManager;
进口android.appwidget.AppWidgetProvider;
进口android.content.Context;
进口android.content.Intent;
进口android.os.Bundle;
进口android.util.Log;
进口android.view.View;
进口android.widget.ImageButton;
进口android.widget.RemoteViews;公共类ExampleAppWidgetProvider扩展AppWidgetProvider {    @覆盖
    公共无效的onReceive(上下文的背景下,意图意图){
        // TODO自动生成方法存根
        Log.e(“DS”,intent.getAction());
        Log.e(“F”,“F”);
        如果(intent.getAction()。包含(“1”)){            RemoteViews意见=新的RemoteViews(context.getPackageName(),R.layout.wid);
            views.setTextViewText(R.id.textView1“heyheyhey”);
            Log.e(“fssss”,“单一小规模设施”);
        }
        super.onReceive(背景下,意图);
    }    公共无效的onUpdate(上下文的背景下,AppWidgetManager appWidgetManager,INT [] appWidgetIds){
        最终诠释N = appWidgetIds.length;        //执行的每个应用程序窗口小部件属于此提供这一循环过程
        的for(int i = 0; I&LT; N;我++){
            INT appWidgetId = appWidgetIds [I]            //创建一个Intent推出为ExampleActivity
            意向意图=新意图(背景下,ExampleAppWidgetProvider.class);
            intent.setAction(“1”);
            的PendingIntent的PendingIntent = PendingIntent.getBroadcast(上下文,0,意图,0);
            //获取为App插件的布局并附加上单击监听器
            //到按钮
            RemoteViews意见=新的RemoteViews(context.getPackageName(),R.layout.wid);
            views.setOnClickPendingIntent(R.id.arrowLeft,的PendingIntent);
           views.setOnClickPendingIntent(R.id.arrowRight,的PendingIntent);
//views.set
            //告诉AppWidgetManager对当前应用程序窗口小部件进行更新
            appWidgetManager.updateAppWidget(appWidgetId,意见);        }    }
}

解决方案

您需要几行代码添加到onRecieve方法的末尾....它应该是这样..

 包com.android.FirstWidget;进口android.app.PendingIntent;
 进口android.appwidget.AppWidgetManager;
 进口android.appwidget.AppWidgetProvider;
 进口android.content.Context;
 进口android.content.Intent;
 进口android.os.Bundle;
 进口android.util.Log;
 进口android.view.View;
 进口android.widget.ImageButton;
 进口android.widget.RemoteViews; 公共类ExampleAppWidgetProvider扩展AppWidgetProvider {
     @覆盖
     公共无效的onReceive(上下文的背景下,意图意图){
         // TODO自动生成方法存根
         Log.e(“DS”,intent.getAction());
         Log.e(“F”,“F”);         RemoteViews意见=新的RemoteViews(context.getPackageName(),R.layout.wid);
         如果(intent.getAction()。包含(“arrow_left”)){
             views.setTextViewText(R.id.textView1,“左”);
             Log.e(“fssss”,“单一小规模设施”);
         }
         否则如果(intent.getAction()。包含(“ARROW_RIGHT”)){
             views.setTextViewText(R.id.textView1,“右”);
             Log.e(“fssss”,“单一小规模设施”);
         }         其他{
             super.onReceive(背景下,意图);
         }
         组件名组件名=新的组件名(背景下,ExampleAppWidgetProvider.class);
         AppWidgetManager.getInstance(上下文).updateAppWidget(组件名,意见);
     }    公共无效的onUpdate(上下文的背景下,AppWidgetManager appWidgetManager,INT [] appWidgetIds){
        最终诠释N = appWidgetIds.length;        //执行的每个应用程序窗口小部件属于此提供这一循环过程
        的for(int i = 0; I&LT; N;我++){
            INT appWidgetId = appWidgetIds [I]            //创建一个Intent推出为ExampleActivity
            意向意图=新意图(背景下,ExampleAppWidgetProvider.class);
            intent.setAction(“arrow_left”);
            的PendingIntent的PendingIntent = PendingIntent.getBroadcast(上下文,0,意图,0);
            //获取为App插件的布局并附加上单击监听器
            //到按钮
            RemoteViews意见=新的RemoteViews(context.getPackageName(),R.layout.wid);
            views.setOnClickPendingIntent(R.id.arrowLeft,的PendingIntent);            意图=新意图(背景下,ExampleAppWidgetProvider.class);
            intent.setAction(“ARROW_RIGHT”);
            的PendingIntent = PendingIntent.getBroadcast(背景下,0,意向,
            views.setOnClickPendingIntent(R.id.arrowRight,的PendingIntent);
//views.set
            //告诉AppWidgetManager对当前应用程序窗口小部件进行更新
            appWidgetManager.updateAppWidget(appWidgetId,意见);        }    }
}

另外,虽然我相信你有什么codeD应该工作,但如果没有,你可以尝试把意图行动的按钮在清单文件中。它应该是这样的。

 &LT;意向滤光器&gt;
        &lt;作用机器人:名字=“android.appwidget.action.APPWIDGET_UPDATE”/&GT;
        &lt;作用机器人:名字=“com.android.FirstWidget.arrow_left”/&GT;
        &lt;作用机器人:名字=“com.android.FirstWidget.arrow_right”/&GT;
&所述; /意图滤光器&gt;

我想现在应该工作。我只是碰巧跌入这个问题我自己,发现这里的解决方案:在Android 可点击小工具

本文地址:IT屋 » Android的Appwidget TextView中没有更新

  • 评论
5人参与,5条评论
  • 最新评论
2016年5月31日 6:13 轮OO渡

很有意思

  回复     
2016年5月31日 2:47 蘑菇傘下沒彩虹

留个脚印~

  回复     
2016年5月31日 1:43 一年又一年

该评论已删除

  回复     
2016年5月30日 23:35 宇智波_土豪

该评论已删除

  回复     
2016年5月30日 14:23 阳君座

围观一下

  回复     
    600AD用户没有激活
    反馈

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值