Android:向ListView App Widget添加多个视图

时间:2011-07-07 12:06:53

标签: android listview android-3.0-honeycomb android-appwidget stackview

我正在尝试使用3.1 SDK创建主屏幕小部件。我按照StackWidget教程进行了操作。并将StackView更改为ListView。 我想在列表中的每一行添加一个图像和文本,并在运行时加载它们。

我在WidgetProvider.java

中使用此代码
public RemoteViews getViewAt(int position) {

    Bitmap bitmap = ((BitmapDrawable)mWidgetItems.get(position).getImage());

    RemoteViews image = new RemoteViews(mContext.getPackageName(), R.layout.widget_item);      
    image.setImageViewBitmap(R.id.widget_image, bitmap );

    RemoteViews text = new RemoteViews(mContext.getPackageName(), R.layout.widget_item); 
    text.setTextViewText(R.id.widget_text, mWidgetItems.get(position).getText());

    RemoteViews layout = new RemoteViews(mContext.getPackageName(), R.layout.widget_item);

    Bundle extras = new Bundle();
    extras.putInt(StackWidgetProvider.EXTRA_ITEM, position);
    Intent fillInIntent = new Intent();
    fillInIntent.putExtras(extras);

    layout.setOnClickFillInIntent(R.id.widget_item, fillInIntent);

    return layout;
}

当我使用StackView时,所有这些都能正常工作,但更改为ListView会让一切变得混乱。结果就是这个

enter image description here

只能返回一个视图。因此,如果我添加以下代码,则会出现此问题,如果我不添加它,则列表的内容为空。

layout.addView(R.id.widget_item, image);
layout.addView(R.id.widget_item, text);

我如何向窗口小部件添加多个视图? 为什么这适用于StackView但不适用于ListView? 以及如何纠正这个问题?

非常感谢任何帮助。

修改

widget_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/widget_item"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_vertical">
<ImageView
    android:id="@+id/widget_image"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:padding="10dp"/>
<TextView
    android:id="@+id/widget_text"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:padding="20dp"
    android:layout_weight="1"
    android:textColor="#000000"/>       
</LinearLayout>

1 个答案:

答案 0 :(得分:1)

您可以通过从一开始就对正确的布局进行充气来解决这个问题。 R.layout.widget_image应该已经拥有R.layout.widget_imageR.layout.widget_item中的所有内容。

这将是:

  • 执行速度更快(实现相同视觉结束的指令更少)
  • 少了Java代码
  • 布局代码较少(一个布局文件与三个布局文件)
  • 更容易维护布局代码(您可以使用Eclipse中的可视化编辑器来更好地维护列表行)

而且,作为额外的奖励,它应该适用于任何受支持的基于AdapterView的应用小部件。