繁体   English   中英

Android AppWidget Listview更改选定的图像按钮onClick

[英]Android AppWidget Listview change selected imagebutton onClick

我有这个主屏幕小部件

例如,很容易更新activity徽标旁边的两个buttons ,因为我从AppWidgetProvider onUpdate方法获得了它们的appWidgetIds,但是imagebuttons中的图像按钮是在getViewAt()方法的RemoteViewsFactory类中创建的。

@Override
    public RemoteViews getViewAt(int position) {
        RemoteViews row = new RemoteViews(ctxt.getPackageName(), R.layout.list_row_widget);
        row.setTextViewText(R.id.tvDescription, items.get(position).name);

        Intent i = new Intent();
        Bundle extras = new Bundle();
        extras.putBoolean(TimeWidgetProvider.ACTION_WORK_START, true);
        extras.putInt(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
        i.putExtras(extras);
        row.setOnClickFillInIntent(R.id.btnStartWork, i);

        return (row);
    }

因此它们每个都有相同的ID(R.id.btnStartWork)和相同的appWidgetId,这不是行ID,而是整个窗口小部件ID。

我需要在单击的行中更改imagebutton,但是因为每次使用时,我在Activity及其整个窗口小部件中只有一个appid标识,所以我每次使用:

AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(getBaseContext());
RemoteViews views = new RemoteViews(getBaseContext().getPackageName(), R.layout.widget_layout);
views.setImageViewResource(R.id.btnStartWork, R.drawable.button_active);
appWidgetManager.updateAppWidget(mAppWidgetId, views);

它将更改第一个图像按钮,而不是所选的按钮。

我试图从工厂传递remoteviews行,但是它没有用,因为当我打电话时

appWidgetManager.updateAppWidget(mAppWidgetId, row);

具有整个小部件的ID,小部件不见了,只有选定的行可见。 我可以获取项目在列表中的位置,但这没有帮助,因为它不是viewId。 我已经阅读了很多教程,其中包括: http : //developer.android.com/guide/topics/appwidgets/index.html

但是仍然没有找到答案,这是我的第一个小部件。 请帮助。

谢谢 ;)

实际上,解决方案非常简单,在getViewAt()方法中,将每个imagebutton按钮的位置保存到extras

extras.putInt(TimeWidgetProvider.POSITION, position);

然后在处理方法中将所选项目的索引存储在某处

TimeWidgetProvider.selected = extras.getInt(TimeWidgetProvider.POSITION);

然后,使用此:

appWidgetManager.notifyAppWidgetViewDataChanged(mAppWidgetId, R.id.list);

最后再次在getViewAt()方法中更改先前存储的索引上的imagebutton

if (position == TimeWidgetProvider.selected) {
    row.setImageViewResource(R.id.btnStartWork, R.drawable.button_active);
} else {
    row.setImageViewResource(R.id.btnStartWork, R.drawable.button_inactive);
}

整个列表会随着所选项目的更改状态而刷新。

THX 陶穆勒的这一解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM