【问题标题】:Android: Add multiple views to ListView App WidgetAndroid:向 ListView App Widget 添加多个视图
【发布时间】:2011-07-07 12:06:53
【问题描述】:

我正在尝试使用 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 会搞砸一切。结果是这样的

只能返回一个视图。所以,如果我添加下面的代码,就会出现这个问题,如果我不添加,那么列表的内容就是空的。

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>

【问题讨论】:

  • 我在上面试图做的是显示所有应用程序的列表,其中包名称以com.google.android 开头及其相关图标。

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


【解决方案1】:

您可以通过从一开始就夸大正确的布局来纠正这个问题。 R.layout.widget_image 应该已经拥有你在 R.layout.widget_imageR.layout.widget_item 中的任何东西。

这将是:

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

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

【讨论】:

  • 嗯.. 我不认为我完全理解它.. 对不起,但这个小部件概念对我来说有点难以掌握。我已经更新了问题并添加了布局代码。能否请您告诉我应该对 xml 和代码进行哪些更改?
  • @rohith:您将widget_item.xmlwidget_text.xmlwidget_image.xml 作为三个单独的文件。将它们合并到一个文件中(大概仍然命名为widget_item.xml),分别保存您的LinearLayoutTextViewImageView。删除其他两个布局文件。删除您在 Java 代码中引用其他两个文件的位置。
  • 那么如何在各自的视图中设置文字和图片呢?
  • @rohith:使用您现有的代码。您的setTextViewText() 电话等不会改变。
  • 我已经更新了上面的代码。如果我使用 addView() 并添加 imagetext,问题仍然存在。如果我不这样做,则 ListView 的内容为空。
猜你喜欢
  • 2016-07-15
  • 1970-01-01
  • 1970-01-01
  • 2015-07-29
  • 2013-05-29
  • 1970-01-01
  • 2013-01-27
  • 2023-03-05
  • 1970-01-01
相关资源
最近更新 更多