首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从RemoteView中的布局编辑/更改视图或从视图创建RemoteView?

如何从RemoteView中的布局编辑/更改视图或从视图创建RemoteView?
EN

Stack Overflow用户
提问于 2013-11-10 07:00:59
回答 2查看 13.8K关注 0票数 10

我为Android应用程序创建小部件(当然是在Java中)。我已经从布局创建了经典的RemoteViews (使用布局id)

代码语言:javascript
复制
RemoteViews rv = new RemoteViews(context.getPackageName(), R.layout.view);

我需要编辑或更改视图(通过id标识)。在经典的视图中,使用findViewById函数很容易。

代码语言:javascript
复制
View v = ... //inflate layout R.layout.view
View my = v.findViewById(R.id.myViewId);
processView(my); //filling view

但它在RemoteViews中不受支持。可以使用apply()获取视图,但是在processView和reapply()之后,我看不到视图中的变化。

代码语言:javascript
复制
View v = rv.apply(context, null);
View my = v.findViewById(R.id.myViewId);
processView(my); //this work's fine
rv.reapply(context,my);

第二个更糟糕的选择是,使用addView()获取所需的视图表单RemoteViews,处理它,删除旧视图并添加处理后的新视图。

代码语言:javascript
复制
RemoteViews rv = ...
View my = ... //apply, find and process
//remove old view
RemoteViews rvMy = ... //create RemoteViews from View
rv.addView(rvMy)

但是我不知道如何从视图创建RemoteViews (这是可能的吗?)有没有办法解决这个问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-15 04:18:34

因为从删除视图编辑/更改(子)视图或从视图创建远程视图是可能的(基于我创建的基础信息),我解决了我的问题,使用命名必备视图(大多数是文本视图),获取视图id使用他的名字和反射,并循环处理。For命名可以使用bash、python或其他任何东西。

示例:

代码语言:javascript
复制
RemoteView rv = ...

/* 
exemplary rv layout:
+-----+-----+-----+-----+-----+-----+
|tv0x0|tv0x1|tv0x2|tv0x3|tv0x4|tv0x5|
+-----+-----+-----+-----+-----+-----+
|tv1x0|tv1x1|tv1x2|tv1x3|tv1x4|tv1x5|
+-----+-----+-----+-----+-----+-----+
*/

String prefix = "tv";
for(int i=0; i<2;i++)
{
    for(int j=0; j<6; j++)
    {
        // use reflection, searched in stackoverflow
        int id = getItemIdFromName(prefix+i+"x"+j); 
        // working with concrete id using RemoteView set functions, e.g
        rv.setTextViewText(id, String.ValueOf(i);
    }
}

这种方法可以处理大量的视图,并为它们应用远程查看功能。

票数 1
EN

Stack Overflow用户

发布于 2013-11-10 09:20:21

尝试这样做:

代码语言:javascript
复制
        RemoteViews remoteViews = new RemoteViews(context.getPackageName(),
                R.layout.widget);

        remoteViews.setTextViewText(R.id.widget_textview, text); <---- here you can set text

        // Tell the widget manager
        appWidgetManager.updateAppWidget(appWidgetId, remoteViews);

这里有一篇有用的文章,可以帮助你理解小部件的行为:

http://www.vogella.com/articles/AndroidWidgets/article.html

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19884218

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档