【问题标题】:display a listview with different formatted entries显示具有不同格式条目的列表视图
【发布时间】:2011-11-08 06:50:56
【问题描述】:

我想构建一个列表视图,显示玩家在游戏中获得的“奖励”。

有很多关于如何显示带有文本 + 图标的列表视图的示例。 但是,就我而言,我需要更改图标。

如果奖励是一次性成就。在这种情况下,我只希望出现文本和“奖杯”。 在其他情况下,它因做某事指定的次数而被授予。 在这种情况下,我需要包含一个进度条。

如何在一个列表视图中进行不同的布局?


更新:

感谢 Leyths,它正在工作(有点)。 问题是 ProgressBar 没有显示 - 只是它的微调器。

这是行:

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent"
 android:layout_height="fill_parent">
<TextView android:id="@+id/tvwShortMessage"
android:typeface="sans"
android:textSize="14sp"
android:textStyle="italic"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView android:id="@+id/tvwLongMessage"
android:typeface="sans"
android:textSize="14sp"
android:textStyle="italic"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/tvwShortMessage"/>
<ProgressBar
android:id="@+id/pgbAwardProgress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@android:style/Widget.ProgressBar.Small"
android:layout_marginRight="5dp" 
android:layout_below="@id/tvwLongMessage"/>

</RelativeLayout>

代码:

    public View getView(int position, View convertView, ViewGroup parent) {
    View v = convertView;
    if (v == null) {
        LayoutInflater vi = (LayoutInflater)AwardsActivity.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        v = vi.inflate(R.layout.awards_row, parent, false);
    }
    AwardItem award = awards.get(position);
    ProgressBar pb = (ProgressBar) v.findViewById(R.id.pgbAwardProgress);
    if(award.award_type == PROGRESSIVE) {
        pb.setVisibility(View.VISIBLE);
        pb.setMax(award.requirement);
        pb.setProgress(award.current_amount);

    } else {
        pb.setVisibility(View.GONE);
    }
    ((TextView) v.findViewById(R.id.tvwShortMessage)).
                  setText(MessageBuilder.buildMessage(AwardsActivity.this, award.award_text, 
                          Integer.valueOf(award.requirement).toString()));

    return v;
    }

我实际上想要相反的 - 没有微调器的酒吧。

这个问题是由于特殊的显示方式还是我在进度条上做错了什么?

结果屏幕:

【问题讨论】:

  • 非常令人困惑....为您的问题提供线框或任何草图。理解起来会更好。
  • 如果您只想将进度条显示为图像,那么您可以让您的 xml 包含图像和 TextView 并根据您对每个列表项的要求更改图像。但如果您真的是指进度条,那就真的很难实现了。

标签: android listview progress-bar


【解决方案1】:

这样做的一种方法是创建一个扩展 BaseAdapter 子类的类,例如 ArrayAdapter,并在您的 getView() 方法中膨胀两个不同视图之一(在您的情况下使用图像和文本或文本和进度条),或膨胀一个视图,然后使用 setVisibility() 设置不同视图元素的可见性以创建所需的最终布局。

例如:

public View getView(int position, View convertView, ViewGroup parent) {
            View v = convertView;
            if (v == null) {
                LayoutInflater vi = (LayoutInflater)YourActivity.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                v = vi.inflate(R.layout.your_layout, parent, false);
            }
            ListObject o = items.get(position);

            if(o.someCondition) {
                v.findViewById(R.id.view_element).setVisibility(View.GONE);
            } else {
                v.findViewById(R.id.some_other_view).setVisibility(View.GONE);
            }
}

【讨论】:

  • 我为我创建的类使用哪个构造函数?因为我重写了 getView() 是否无关紧要?
  • 试试看 this 页面底部的 ContentAdapter 类,它应该提供了一个很好的骨架类供您在其上构建。
  • 它可以工作,只是我遇到了进度条显示不正确的问题。我得到的只是没有杆的微调器。请参阅我的代码编辑。
  • 如果您的意思是 ProgressBar 出现在一个不确定的状态(例如从 0% 填充到 100% 的进度条没有出现并且旋转的 '这将需要很长时间因为它需要'轮子在它的位置)然后你需要在 ProgressBar 上调用setIndeterminate(false)
  • 来自here,它说您需要在布局的.xml 文件中添加ProgressBar 标记行style="?android:attr/progressBarStyleHorizontal",替换当前样式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-26
  • 2023-03-11
  • 1970-01-01
  • 2018-05-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多