我正在尝试创建一个从rss feed加载到widget中的listview?
有没有人知道如何在wigdet中使用listview的教程?
也许有人可以提供1.
答案 0 :(得分:1)
我正在尝试创建一个从rss feed加载到widget中的listview?
这只适用于Honeycomb。早期版本的Android不支持这一点,未来的手机是否会支持它还有待观察。
有没有人知道如何在wigdet中使用listview的教程?
WeatherListWidget示例位于SDK中,并对in the documentation进行了轻微解释。
答案 1 :(得分:-1)
基本上,您需要使用两个组件:
让我们创建RemoteViewsFactory类:
public class MyWidgetRemoteViewsFactory implements RemoteViewsService.RemoteViewsFactory {
private Context mContext;
private Cursor mCursor;
public MyWidgetRemoteViewsFactory(Context applicationContext, Intent intent) {
mContext = applicationContext;
}
@Override
public void onCreate() {
}
@Override
public void onDataSetChanged() {
if (mCursor != null) {
mCursor.close();
}
final long identityToken = Binder.clearCallingIdentity();
Uri uri = Contract.PATH_TODOS_URI;
mCursor = mContext.getContentResolver().query(uri,
null,
null,
null,
Contract._ID + " DESC");
Binder.restoreCallingIdentity(identityToken);
}
@Override
public void onDestroy() {
if (mCursor != null) {
mCursor.close();
}
}
@Override
public int getCount() {
return mCursor == null ? 0 : mCursor.getCount();
}
@Override
public RemoteViews getViewAt(int position) {
if (position == AdapterView.INVALID_POSITION ||
mCursor == null || !mCursor.moveToPosition(position)) {
return null;
}
RemoteViews rv = new RemoteViews(mContext.getPackageName(), R.layout.collection_widget_list_item);
rv.setTextViewText(R.id.widgetItemTaskNameLabel, mCursor.getString(1));
return rv;
}
@Override
public RemoteViews getLoadingView() {
return null;
}
@Override
public int getViewTypeCount() {
return 1;
}
@Override
public long getItemId(int position) {
return mCursor.moveToPosition(position) ? mCursor.getLong(0) : position;
}
@Override
public boolean hasStableIds() {
return true;
}
}
现在是RemoteViewsService(简单的)的时候了:
public class MyWidgetRemoteViewsService extends RemoteViewsService {
@Override
public RemoteViewsFactory onGetViewFactory(Intent intent) {
return new MyWidgetRemoteViewsFactory(this.getApplicationContext(), intent);
}
}
此外,您必须在androidManifest.xml中注册此服务:
<service android:name=".AppWidget.MyWidgetRemoteViewsService"
android:permission="android.permission.BIND_REMOTEVIEWS"></service>
现在在扩展AppWidgetProvider的Widget类中,您可以管理布局:
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
for (int appWidgetId : appWidgetIds) {
RemoteViews views = new RemoteViews(
context.getPackageName(),
R.layout.collection_widget
);
Intent intent = new Intent(context, MyWidgetRemoteViewsService.class);
views.setRemoteAdapter(R.id.widgetListView, intent);
appWidgetManager.updateAppWidget(appWidgetId, views);
}
}
现在在 res / xml 中创建一个新资源文件,并将其命名为collection_widget.xml:
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:minWidth="40dp"
android:minHeight="40dp"
android:updatePeriodMillis="864000"
android:previewImage="@drawable/simple_widget_preview"
android:initialLayout="@layout/collection_widget"
android:resizeMode="horizontal|vertical"
android:widgetCategory="home_screen">
</appwidget-provider>
我们需要在 res / layout 中再创建两个文件来定义列表的布局和每个列表项的布局。
<强> collection_widget.xml 强>:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/colorWhite"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical">
<FrameLayout android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView android:layout_width="match_parent"
android:id="@+id/widgetTitleLabel"
android:text="@string/title_collection_widget"
android:textColor="@color/colorWhite"
android:background="@color/colorPrimary"
android:textSize="18dp"
android:gravity="center"
android:textAllCaps="true"
android:layout_height="@dimen/widget_title_min_height"></TextView>
</FrameLayout>
<LinearLayout android:layout_width="match_parent"
android:layout_height="wrap_content">
<ListView android:id="@+id/widgetListView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/colorWhite"
android:dividerHeight="1dp"
android:divider="#eeeeee"
tools:listitem="@layout/collection_widget_list_item"></ListView>
</LinearLayout>
</LinearLayout>
<强> collection_widget_list_item.xml 强>:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:paddingLeft="@dimen/widget_listview_padding_x"
android:paddingRight="@dimen/widget_listview_padding_x"
android:paddingStart="@dimen/widget_listview_padding_x"
android:paddingEnd="@dimen/widget_listview_padding_x"
android:minHeight="@dimen/widget_listview_item_height"
android:weightSum="2"
android:id="@+id/widgetItemContainer"
android:layout_height="wrap_content">
<TextView android:id="@+id/widgetItemTaskNameLabel"
android:layout_width="wrap_content"
android:gravity="start"
android:layout_weight="1"
android:textColor="@color/text"
android:layout_gravity="center_vertical"
android:layout_height="wrap_content"></TextView>
</LinearLayout>
我使用这篇文章就像一个例子,对我来说就像一个魅力!!
https://www.sitepoint.com/killer-way-to-show-a-list-of-items-in-android-collection-widget/
现在有一天,这并不罕见。希望能帮助别人。