Я читаю HTML-страницу и получаю значения из таблицы, состоящей из two colums
. Эти значения мне нужно вставить в ListView
.Как заполнить ListView из ArrayAdapter
Мне трудно понять концепции Arrays
и ArrayAdapter
, поэтому я попытался что-то поделать, читая различные примеры кода.
Мой код отлично работает, когда я заполняю свой ArrayAdapter статически (в Java-коде), но мне нужно использовать цикл (или что-то?), Чтобы заполнить содержимое массива тем, что я получаю со страницы HTML (все это код работает и находится на месте).
Это то, что я использую:
Ranking.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);
Так что мой вопрос;
Как заполнить rank_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
, но как в противном случае я должен инициализировать его?
Редактировать
Мой RankingAdapter
объявлен как это:
public class RankingAdapter extends ArrayAdapter<Ranking>
, если это помогает?
Edit 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;
}
}
использование 'ArrayList' типа Ранжирование вместо массива, если не известно, сколько элементов вы появится в «ListView». если вы знаете количество элементов, тогда сначала определите размер массива 'rank_data' перед добавлением в него элементов –
@ ρяσѕρєяK Как бы объявить ранжирование с помощью' ArrayList' вместо массива? Извините за то, что вы всего лишь n00b, когда дело доходит до массивов и т. Д. См. Раздел «Редактирование» о том, как объявлен мой «RankingAdapter». Мой RankingAdapter расширяет ArrayAdapter. –
kaderud
http://stackoverflow.com/questions/15109406/how-to-set-json-parsed-data-in-a-listview-and-then-adding-search-functionality-i/15109592#15109592. Проверьте ответ. Вместо NewData есть класс Ranking. Измените код соответствующим образом. – Raghunandan