多个Android Widget实例仅更新最后一个小部件

多个Android Widget实例仅更新最后一个小部件,第1张

概述我尝试用这个 link来解决我的问题 update – I figured out that there is something wrong with the setter of the pending intent- every time I click on the imageview- the intent sends the extre details of the last defin 我尝试用这个 link来解决我的问题

update – I figured out that there is something wrong with the setter of the pending intent- every time I click on the imagevIEw- the intent sends the extre details of the last defined Widget-
meaning that the other pending intents that where defined on the pre-added Widgets were run-over by the newer Widgets

我有一个应用程序小部件,显示用户选择的图片.(许多小部件 – 许多图片)
我的问题是:无论我在屏幕上显示哪个小部件 – 只有最后添加的小部件会更新
这是我的代码

我的Widget xml提供程序代码

<appWidget-provIDer xmlns:androID="http://schemas.androID.com/apk/res/androID"    androID:initialLayout="@layout/Widget_Test"    androID:minHeight="146dip"    androID:minWIDth="146dip"    androID:updatePeriodMillis="0" />

我的Manifest xml代码

<?xml version="1.0" enCoding="utf-8"?><manifest xmlns:androID="http://schemas.androID.com/apk/res/androID"    package="com.test"    androID:versionCode="1"    androID:versionname="1.0" >    <uses-sdk androID:minSdkVersion="8" />    <uses-permission androID:name="androID.permission.BIND_REMOTEVIEWS" >    </uses-permission>    <application            androID:icon="@drawable/icon"            androID:label="@string/app_name" >            <activity                    androID:name=".ActivitIEs.WidgetConfig"                    androID:screenorIEntation="portrait" >                    <!-- prbbly delete this line -->                    <action androID:name="androID.appWidget.action.APPWidget_CONfigURE" />            </activity>            <!-- Test Widget -->            <receiver                    androID:name=".Simple.Widget"                    androID:label="@string/app_Widget_Test" >                    <intent-filter>                            <action androID:name="androID.appWidget.action.APPWidget_UPDATE" />                    </intent-filter>                    <Meta-data                            androID:name="androID.appWidget.provIDer"                            androID:resource="@xml/Widget_Test_provIDer" />            </receiver>            <service androID:name=".Simple.Widget$TestWidgetService" />    </application></manifest>

小部件提供者

public class Widget extends appwidgetprovider{    public static String PREFENCES_Widget_CONfigURE = "ActionConfigureWidget";    public  static int[] Widgets;    @OverrIDe    public voID onUpdate(Context context,AppWidgetManager appWidgetManager,int[] appWidgetIDs)    {            Intent svcIntent = new Intent(context,TESTWidgetService.class);            Widgets = appWidgetIDs;            context.startService(svcIntent);    }    public static class TESTWidgetService extends Service    {            @OverrIDe            public voID onStart(Intent intent,int startID)            {                    super.onStart(intent,startID);                    // Update the Widget                    RemoteVIEws remoteVIEw = buildremoteVIEw(this);                    // Push update to homescreen                    Mngr.getInstance().pushUpdate(remoteVIEw,getApplicationContext(),Widget.class);                    // No more updates so stop the service and free resources                    stopSelf();            }            public RemoteVIEws buildremoteVIEw(Context context)            {                    RemoteVIEws remoteVIEws = new RemoteVIEws(context.getPackagename(),R.layout.Widget_TEST);                    if (Widgets != null)                    {                            int length = Widgets.length;                            for (int i = 0; i < length; i++)                            {                                    Intent configIntent = new Intent(context,WidgetConfig.class);                                    configIntent.setAction(Widget.PREFENCES_Widget_CONfigURE);                                    String number = AppWidgetManager.EXTRA_APPWidget_ID                                                    + "number";                                    configIntent.putExtra(number,length);                                    String WidgetID = AppWidgetManager.EXTRA_APPWidget_ID + i;                                    int ID = Widgets[i];                                    configIntent.putExtra(WidgetID,ID);                                    PendingIntent runTESTPendingIntent = PendingIntent                                                    .getActivity(context,configIntent,PendingIntent.FLAG_UPDATE_CURRENT);                                    remoteVIEws.setonClickPendingIntent(R.ID.TESTWIDgetimage,runTESTPendingIntent);                                    Mngr controller = Mngr.getInstance();                                    controller.updateTESTWidget(context,remoteVIEws);                            }                    }                    return remoteVIEws;            }            @OverrIDe            public voID onConfigurationChanged(Configuration newConfig)            {                    int oldOrIEntation = this.getResources().getConfiguration().orIEntation;                    if (newConfig.orIEntation != oldOrIEntation)                    {                            // Update the Widget                            RemoteVIEws remoteVIEw = buildremoteVIEw(this);                            // Push update to homescreen                            Mngr.getInstance().pushUpdate(remoteVIEw,Widget.class);                    }            }            @OverrIDe            public IBinder onBind(Intent arg0)            {                    // Todo auto-generated method stub                    return null;            }    }}

我的配置活动

public class WidgetConfig extends ListActivity // implements{    private Bundle m_extras;    private ArrayList<Test> m_tests = null;    private int mAppWidgetID = AppWidgetManager.INVALID_APPWidget_ID;    ImageAdapter m_adapter;    @OverrIDe    protected voID onCreate(Bundle savedInstanceState)    {            super.onCreate(savedInstanceState);            setContentVIEw(R.layout.imageList);            Resources res = getResources();            Mngr mngr = Mngr.getInstance();            mngr.setResources(res);            Context ctx = getApplicationContext();            mngr.setContext(ctx);            getTests();            m_adapter = new ImageAdapter(ctx,R.layout.row,m_tests);            ImageDownloader.Mode mode = ImageDownloader.Mode.CORRECT;            m_adapter.getimageDownloader().setMode(mode);            setlistadapter(m_adapter);            Intent intent = getIntent();            m_extras = intent.getExtras();    }    private voID getTests()    {            m_tests = new ArrayList<Test>();            Resources res = getResources();            String[] Testnames = res.getStringArray(R.array.fav_Test_array);            TypedArray imgs = getResources().obtainTypedArray(                            R.array.fav_Test_integer);            for (int i = 0; i < Testnames.length; i++)            {                Test o1 = new test();                String Testname = Testnames[i];                int resID = imgs.getResourceID(i,-1);                o1.setTestname(Testname);                o1.setimgID(resID);                m_tests.add(o1);            }            imgs.recycle();    }    @OverrIDe    protected voID onListItemClick(ListVIEw l,VIEw v,int position,long ID)    {        listadapter adapt = l.getAdapter();        Object obj = adapt.getItem(position);        if (obj != null)        {            Mngr mngr = Mngr.getInstance();            Context context = getApplicationContext();            String key = context.getString(R.string.TestWidget_string) + "_"                + AppWidgetManager.EXTRA_APPWidget_ID;            Test Test = (Test) obj;            String val = Test.getimgID().toString();            mngr.putString(context,key,val);            updateWidget();        }        super.onListItemClick(l,v,position,ID);    }    private voID updateWidget()    {        Context ctx = getApplicationContext();        AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(ctx);        setResult(RESulT_CANCELED);        if (m_extras != null)        {            Intent resultValue = new Intent();            int numberOfWidgets = m_extras.getInt(                AppWidgetManager.EXTRA_APPWidget_ID + "number",AppWidgetManager.INVALID_APPWidget_ID);            for (int i = 0; i < numberOfWidgets; i++)            {                String stringID = AppWidgetManager.EXTRA_APPWidget_ID + i;                mAppWidgetID = m_extras.getInt(stringID,AppWidgetManager.INVALID_APPWidget_ID);                /*************************************************************/                /*I Don't really kNow if I am using this pIEce of code right */                Uri data = Uri.withAppendedpath(Uri.parse("ABCD"                                + "://Widget/ID/"),String.valueOf(mAppWidgetID));                resultValue.setData(data);                /*************************************************************/                RemoteVIEws vIEws = new RemoteVIEws(ctx.getPackagename(),R.layout.Widget_Test);                Mngr.getInstance().updateTestWidget(ctx,vIEws);                appWidgetManager.updateAppWidget(mAppWidgetID,vIEws);                resultValue.putExtra(stringID,mAppWidgetID);            }            setResult(RESulT_OK,resultValue);            finish();        }    }}

我的Mngr代码

public voID updateTestWidget(Context context,RemoteVIEws remoteVIEws){    String key = context.getString(R.string.TestWidget_string) + "_"            + AppWidgetManager.EXTRA_APPWidget_ID;    String s = getString(context,"");    if (s != null && s.equals("") == false)    {        int resID = Integer.valueOf(s);        remoteVIEws.setimageVIEwResource(R.ID.TestWIDgetimage,resID);    }}public voID pushUpdate(RemoteVIEws remoteVIEw,Context ctx,Class<?> cls){    Componentname myWidget = new Componentname(ctx,cls);    AppWidgetManager manager = AppWidgetManager.getInstance(ctx);    manager.updateAppWidget(myWidget,remoteVIEw);}
解决方法 问题不在于您的configActivity,问题出在您的WidgetProvIDer中.我遇到了和你一样的问题但是使用你指定的 link解决了.您需要在buildremoteVIEw中的configIntent上设置“Hacked”意图. 总结

以上是内存溢出为你收集整理的多个Android Widget实例仅更新最后一个小部件全部内容,希望文章能够帮你解决多个Android Widget实例仅更新最后一个小部件所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1127044.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-30
下一篇2022-05-30

发表评论

登录后才能评论

评论列表(0条)

    保存