2011-11-08 5 views
1

プレイヤーがゲームで受け取った「賞」を表示するリストビューを作成したい。異なるフォーマットのエントリでリストビューを表示

テキスト+アイコンでリストビューを表示する方法はたくさんあります。 しかし私の場合、アイコンを変更する必要があります。

賞は1回限りの成果で与えられます。その場合は、テキストと「トロフィー」を表示するだけです。 それ以外の場合は、指定された回数何かをしたことで授与されます。 その場合、私は進行状況バーを含める必要があります。

1つのリストビュー内でさまざまなレイアウトを実行するにはどうすればよいですか?


更新:それは(一種の)働いている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

+0

非常に混乱....ワイヤーフレームや、あなたの問題のいずれかのスケッチを提供しています。理解する方が良いでしょう。 –

+0

進行状況バーをイメージとして表示する場合は、xmlにイメージとTextViewが含まれ、各listitemの要件に従って画像を変更することができます。しかし、プログレスバーを実際に意味する場合、実装するのは本当に難しい。 – Hiral

答えて

3

一例ArrayAdapterのために、BaseAdapterのサブクラスを拡張するクラスを作成することですこれを行う方法、およびお使いのgetViewメソッド()メソッドのいずれか二つのうちの一つを膨らませますさまざまなビュー(ケースやテキスト、プログレスバー内のイメージとテキスト)、または1つのビューを膨張させた後、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); 
      } 
} 
+0

作成するクラスにはどのコンストラクタを使用しますか?私はgetView()をオーバーライドしているので、それは無関係ですか? – theblitz

+0

[this](http://code.google.com/p/bconnected-gtv/source/browse/android/src/edu/bsu/android/gtv/apps/bconnected/ui/ContentFragment)の下部を見てみてください。 .java?spec = svn1f13a3bdc54fff5afdb55d2be47d122e2cc22ef7&name = 1f13a3bdc5&r = 1f13a3bdc54fff5afdb55d2be47d122e2cc22ef7)ContentAdapterクラスのページでは、上にビルドするための優れたスケルトンクラスを提供する必要があります。 – Leyths

+0

プログレスバーが正しく表示されないという問題があることを除いて動作します。私が得意にするのは、バーのないスピナーです。コードの私の編集を参照してください。 – theblitz

関連する問題