android - 显示具有不同格式条目的 ListView

标签 android listview progress-bar

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

有很多示例可以说明如何使用文本 + 图标显示 ListView 。 但是,就我而言,我需要改变图标。

在这种情况下,奖励是针对一次性成就颁发的。在那种情况下,我只想显示文本和“奖杯”。 在其他情况下,它会因完成指定次数而获得奖励。 在这种情况下,我需要包含一个进度条。

如何在一个 ListView 中进行不同的布局?


更新:

感谢 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;
    }

我实际上想要相反的东西 - 没有微调器的栏。

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

结果屏幕:

enter image description here

最佳答案

这样做的一种方法是创建一个扩展 BaseAdapter 子类的类,例如 ArrayAdapter,并在您的 getView() 方法中膨胀两个不同 View 之一(在您的案例中带有图像和文本或文本和进度条),或者膨胀一个 View 然后使用设置不同 View 元素的可见性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);
            }
}

关于android - 显示具有不同格式条目的 ListView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8046874/

相关文章:

java - Android - ListView

android - 使用 Delphi xe7 从 Windows 操作系统向 Android 设备发送文本

listview - 鼠标套索选择期间 ListView 滚动的错误(Windows 10 更新 16299)

android - ListView 不显示我的数据库中的文本

javascript - 更改模板后如何重新绑定(bind) Kendo ListView

java - 从数据库加载数据时添加进度条

javascript - Android WebView 在底部添加奇怪的空白区域

javascript - 如何检查已加载了多少页面

ios - 解压缩文件进度在 block 内不起作用

android - DrawerLayout、NavigationView 和 android :Theme. Material.Light 不兼容?