我想构建一个 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;
}
我实际上想要相反的东西 - 没有微调器的栏。
这个问题是由于它的特殊显示方式还是我对进度条做错了什么?
结果屏幕:
最佳答案
这样做的一种方法是创建一个扩展 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/