0

HTML ページを読んでいて、で構成されるテーブルから値を取得していますtwo colums。これらの値を に挿入する必要がありますListView

Arrays、、 の概念を理解するのに苦労しているArrayAdapterので、さまざまなコード例を読んで何かを入れようとしました。

私のコードは、ArrayAdapter を静的に (Java コードで) 埋めると完璧に動作しますが、ループ (または何か?) を使用して、HTML ページから取得したもので配列の内容を埋める必要があります (そのコードはすべて機能し、所定の位置に)。

これは私が使用しているものです:

ランキング.java

public class Ranking {
    public String month;
    public String rank;

    public Ranking() {
        super();
    }
    public Ranking(String month, String rank) {
        super();
        this.month = month;
        this.rank = rank;
    }
}

このコードは機能します:

Ranking ranking_data[] = new Ranking[] {
    new Ranking("January 2013", "67"),
    new Ranking("February 2013", "45"),
}

そしてranking_data、自分の RankingAdapter で を参照します。

RankingAdapter adapter = new RankingAdapter(this, R.layout.listview_item_row, ranking_data);

私の質問は次のとおりです。

ranking_data を動的に入力するにはどうすればよいですか?

たとえば、これはループでの入力には機能しないようです。

Ranking ranking_data[] = null;
String mVal1, mVal2;
while (myIterator1.hasNext() && myIterator2.hasNext()) {
   mVal1 = myIterator1.next().text();
   mVal2 = myIterator2.next().text();
   new Ranking(mVal1, mVal2);
}

これは、おそらく の初期化が に設定されているため、NullPointerExceptionへの呼び出しにRankingAdapter adapter = new RankingAdapter(this, R.layout.listview_item_row, ranking_data);ranking_datanull

Edit
MyRankingAdapterは次のように宣言されます。

public class RankingAdapter extends ArrayAdapter<Ranking>それが役立つ場合は?

編集 2

RankingAdapter.javaのコードを追加

public class RankingAdapter extends ArrayAdapter<Ranking> {
  Context context;
  int layoutResourceId;   
  Ranking data[] = null;

public RankingAdapter(Context context, int layoutResourceId, Ranking[] data) {
  super(context, layoutResourceId, data);
  this.layoutResourceId = layoutResourceId;
  this.context = context;
  this.data = data;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View row = convertView;
    RankingHolder holder = null;

    if(row == null) {
        LayoutInflater inflater = ((Activity)context).getLayoutInflater();
        row = inflater.inflate(layoutResourceId, parent, false);

        holder = new RankingHolder();
        holder.txtMonth = (TextView)row.findViewById(R.id.item_month);
        holder.txtRank = (TextView)row.findViewById(R.id.item_rank);

        row.setTag(holder);
    } else {
        holder = (RankingHolder)row.getTag();
    }

    Ranking ranking = data[position];

    holder.txtMonth.setText(ranking.month);
    holder.txtRank.setText(ranking.rank);

    return row;
}
static class RankingHolder {
    TextView txtMonth;
    TextView txtRank;
}

}

4

2 に答える 2

1

作成したコードでは、リストにデータを割り当てたり追加したりしておらず、最初はnullで初期化され、エラーが発生していました。

あなたは以下のようなものを書くことができます:

//declare arraylist
ArrayList<Ranking> ItemArray = new ArrayList<Ranking>();
String mVal1, mVal2;
while (myIterator1.hasNext() && myIterator2.hasNext()) {
   mVal1 = myIterator1.next().text();
   mVal2 = myIterator2.next().text();
   //add item in your arrayList
   ItemArray.add(new Ranking(mVal1, mVal2));
}

adapter.notifydatasetchanged()リストビューのコンテンツを変更する場合は、書くことを忘れないでください

カスタムアレイアダプタを使用したリストビューの明確なアイデアを得るには、以下のリンクを参照してください。

http://www.vogella.com/articles/AndroidListView/article.html

于 2013-03-15T18:06:02.723 に答える
0

空のコレクションでアダプターを初期化し、コレクションのデータを動的に変更します。変更後、Array Adapterの notifyDatasetChanged メソッドを呼び出します。

于 2013-03-15T17:57:35.900 に答える