ala*_*hoi 1 layout android listview widget android-listview
ListView
如果给出触发器,我想更新 Android 应用程序小部件中的某些项目 a 的布局。所以我getView()
在 中的方法中实现了下面的方法RemoteViewsService.RemoteViewsFactory
。
public RemoteViews getViewAt(int position) {
...
int remoteViewId;
if (some condition) {
remoteViewId = R.layout.highlighted_item;
} else {
remoteViewId = R.layout.item;
}
RemoteViews rv = new RemoteViews(mContext.getPackageName(), remoteViewId);
Run Code Online (Sandbox Code Playgroud)
此代码在首次加载小部件时有效,但在使用notifyAppWidgetViewDataChanged
布局进行更新时仍然存在并且不会更改。如何更新用于 ListView 项目的 xml 布局?
如果我的假设是正确的,并且您尝试通过更改背景颜色或类似的内容来突出显示列表项,我\xc2\xb4d 建议使用可绘制选择器,而不是以编程方式更改布局:
\n可绘制/list_item_selector.xml
\n<selector xmlns:android="http://schemas.android.com/apk/res/android">\n\n <item \n android:state_activated="true"\n android:drawable="@drawable/list_item_background_activated" />\n \n <item \n android:state_pressed="true"\n android:drawable="@drawable/list_item_background_pressed" />\n\n <item\n android:drawable="@drawable/list_item_background" />\n\n</selector>\n
Run Code Online (Sandbox Code Playgroud)\n可绘制/list_item_background.xml
\n可绘制/list_item_background_pressed.xml
\n可绘制/list_item_background_activated.xml
为选择器中的每个状态定义这样一个可绘制对象,并将“颜色”替换为适当的颜色资源。
\n<shape xmlns:android="http://schemas.android.com/apk/res/android"\n android:shape="rectangle" >\n \n <solid android:color="color" />\n\n <stroke\n android:width="1dp"\n android:color="color" />\n\n</shape>\n
Run Code Online (Sandbox Code Playgroud)\n将列表选择器应用到 widget\xc2\xb4s 布局中的 ListView:
\n<ListView\n android:id="@android:id/list"\n android:layout_width="fill_parent"\n android:layout_height="fill_parent"\n android:listSelector="@drawable/list_item_selector" />\n
Run Code Online (Sandbox Code Playgroud)\n我将其用于我自己的小部件,并且它运行良好。\n有关状态列表的更多信息,请参阅此链接。
\n要更改整个布局,请尝试以下操作:
\npublic class WidgetListProvider implements RemoteViewsFactory {\n\n private boolean alternateLayout = 1;\n\n @Override\n public void onDataSetChanged() {\n \n alternateLayout = alternateLayout == 1 ? 2 : 1;\n }\n\n @Override\n public RemoteViews getViewAt(int position) {\n \n final RemoteViews rv = new RemoteViews(_context.getPackageName(),\n alternateLayout == 1 ? R.layout.list_row : R.layout.list_row2);\n\n [...]\n \n return rv;\n }\n\n @Override\n public int getViewTypeCount() {\n \n return 2;\n }\n\n [...] \n} \n
Run Code Online (Sandbox Code Playgroud)\n重要提示:注意 getViewTypeCount() - 因为您使用两种不同的布局,所以必须在此处返回 2。如果返回 1,将显示第二个布局的加载视图。
\n 归档时间: |
|
查看次数: |
905 次 |
最近记录: |