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_data
null
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;
}
}