отобразить список с различными отформатированными записями - PullRequest
1 голос
/ 08 ноября 2011

Я хочу создать представление списка, в котором отображаются «награды», полученные игроком в игре.

Существует множество примеров того, как отобразить представление списка с текстом + значок.Однако в моем случае мне нужно изменить значок.

В случае, если награда вручается за одноразовое достижение.В таком случае я просто хочу, чтобы текст и «Трофей» появились.В других случаях он присуждается за выполнение определенного количества раз.В этом случае мне нужно включить индикатор выполнения.

Как мне сделать различные макеты в одном представлении списка?


Обновление:

Благодаря Leyths itработает (вроде).Дело в том, что 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

1 Ответ

3 голосов
/ 08 ноября 2011

Один из способов сделать это - создать класс, который расширяет подкласс 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);
            }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...