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

我为Android应用程序创建了一个小部件(当然是用Java)。 我有从布局创建的经典RemoteViews(使用布局ID)

RemoteViews rv = new RemoteViews(context.getPackageName(), R.layout.view);

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

View v = ... //inflate layout R.layout.view
View my = v.findViewById(R.id.myViewId);
processView(my); //filling view

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

View v = rv.apply(context, null);
View my = v.findViewById(R.id.myViewId);
processView(my); //this work's fine
rv.reapply(context,my);

其次,更糟糕的选择是,获取我需要的查看表单RemoteViews,处理它,删除旧视图并使用addView()添加已处理的新视图。

RemoteViews rv = ...
View my = ... //apply, find and process
//remove old view
RemoteViews rvMy = ... //create RemoteViews from View
rv.addView(rvMy)

但我不知道如何从View创建RemoteViews(这可能吗?)。 任何想法如何解决这个问题?


试试这种方式:

        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


因为从removeview或从视图创建remoteview的编辑/改变(子)视图是不可能的(在我创建的基本信息上),我使用命名后缀视图(最后的textview)解决了我的问题,使用他的名字和反射来创建视图id,循环过程。 对于命名可以使用bash,python或其他任何东西。

例:

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);
    }
}

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

链接地址: http://www.djcxy.com/p/75369.html

上一篇: How edit/change View from layout in RemoteView or create RemoteView from View?

下一篇: How to unset csrf in modelviewset of django