2011-10-19 7 views
0

私は文字列配列を持っていて、その項目をリストに表示したい。 私はテーブルを含むrow.xmlを持っていて、各行に3つのTextViewがあります。 私がしたいことは、各行に配列の3つのアイテムをそれぞれ示しています。アンドロイド、アレイアダプターを使用している悪いリソース

サンプル:String[] str = {"1", "2", "3", "4", "5", "6"}; 各行は次のようにする必要があります:

str[1]----str[2]----str[3] 
str[4]----str[5]----str[6] 

私のXMLコードは次のとおりです。

のOnCreate()私は(私はいくつかの他のビューとリストビューを持っている)入れで
<?xml version="1.0" encoding="utf-8"?> 

<TableLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:shrinkColumns="*" 
android:stretchColumns="*" > 
    <TableRow 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:gravity="center_horizontal" 
    android:layout_marginTop="10dip" 
    android:layout_marginBottom="10dip" > 
     <TextView 
      android:id="@+id/outstanding_contractdate" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textColor="#ffffff" 
      android:textSize="15sp" /> 
     <TextView 
      android:id="@+id/outstanding_contractno" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textColor="#ffffff" 
      android:textSize="15sp" /> 
     <TextView 
      android:id="@+id/outstanding_contractamount" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentRight="true" 
      android:textColor="#ffffff" 
      android:textSize="15sp" /> 
    </TableRow> 

</TableLayout> 

lvOutstanding = (ListView) findViewById(R.id.outstanding_list); 
lvOutstanding.setAdapter(new MyListAdapter()); 

これは私のアダプタです:

class MyListAdapter extends ArrayAdapter<String>{ 
     MyListAdapter(){ 
      super(MSOutStanding.this, R.layout.list_outstanding, tokens); 
     } 

     public View getView(int position, View convertView, ViewGroup parent){ 
      View row = convertView; 

      //String str = llData.get(position); 
      //String[] tokens = str.split(","); 

      if(row == null){ 
       LayoutInflater inflater = getLayoutInflater(); 
       row = inflater.inflate(R.layout.list_outstanding, parent, false); 
      } 

      TextView tvContDate = (TextView) row.findViewById(R.id.outstanding_contractdate); 
      TextView tvContNo = (TextView) row.findViewById(R.id.outstanding_contractno); 
      TextView tvContAmount = (TextView) row.findViewById(R.id.outstanding_contractamount); 

      tvContDate.setText(tokens[0]); 
      tvContNo.setText(tokens[1]); 
      tvContAmount.setText(tokens[2]); 

      return(row); 
     } 
    } 

私の最初の問題は、結果がわかりません。 2番目は、私はこの方法で、私のクラス(private static String[] tokens = {"", "", ""};)の上に文字列配列として "トークン"を定義している、私はアプリケーションを実行すると、それは私に同じ結果で3行を示しています。 しかし、私がPrivate static String[] tokens;のような定義を変更すると、プログラムがクラッシュします。 ? は、私はそれがどこ私のせいである私に言う

おかげ

+0

私は(位置= 0){数える場合は、のようなものを試してみてくださいだと思う最初の解決のために= 0} tvContDate.setText(count); tvContNo.setText(count + 1); tvContAmount.setText(count + 2);カウント+ = 3; countをint count = 0として宣言します。クラス(あなたの活動)のデータメンバーとして。私が間違っていたら、それを知らせてください。ありがとうございます:-) – user370305

+0

ありがとうございます。それは難しいアイディアでした。私はアプリケーションがクラッシュしてテストしました。私はコードを書いた:if(position == 0) \t \t \t \t count = 0; \t \t \t tvContDate.setText(トークン[位置*カウント]); \t \t \t tvContNo。setText(トークン[位置*カウント+1]); \t \t \t tvContAmount.setText(トークン[位置*カウント+ 2])。 \t \t \t数= 3; – Hesam

+0

私は各反復の後に3カウントを追加することはできないと思いますが、3を割り当てればOKです。もう一度 – Hesam

答えて

1

を使用すると可能かどう:(頭痛ました:

static String[] tokens; 

の代わり:

static String[] tokens = { "", "", "" }; 

トークンではありませんあなたのコメントでは、トークン[position * count + 1]を実行すると、すぐに配列の境界から外れてしまいます - 上記のようにtokens = {""、 ""、 ""}を使用した場合、配列内には3つの要素しかありません。

あなたはこのラインでスーパーコンストラクタにトークンを渡すとき:

super(MSOutStanding.this, R.layout.list_outstanding, tokens); 

あなたは、アレイ内の3つの要素があるので、リスト中の3行がなければならないことを言っています。 3番目の項目では、position = 3 * count = 3 == boomが配列に入ります。 スーパーコンストラクタにオブジェクトの配列(またはArrayListに)を渡します:解決する

一つの方法

public class Contract { 
     String date; 
     String no; 
     String amount; 

     Contract(String d, String n, String a) { 
      date = d; 
      no = n; 
      amount = a; 
     }  
    } 

Contract[] contracts = { new Contract("1", "2", "3"), new Contract("4", "5", "6") }; 
    class MyListAdapter extends ArrayAdapter<Contract>{ 
     MyListAdapter(){ 
       super(MSOutStanding.this, R.layout.list_outstanding, contracts); 
      } 
    } 
    ... 

    public View getView(int position, View convertView, ViewGroup parent){ 
     ... 
     Contract c = getItem(position); 
     tvContDate.setText(c.date); 
     tvContNo.setText(c.no); 
     tvContAmount.setText(c.amount); 
... 
    } 
関連する問題