Анализирам уеб услуга за показване в listView, подкрепен от моя собствен подклас на ArrayAdapter. Данните са static ArrayList<Wait>
в Application.java
. Ще го видите споменат от App.getWaits()
.
Използвам прост метод за опресняване, когато има нови данни. Потвърдих, че се актуализира, но се изобразява само ако навигирам и след това се върна към изгледа.
В миналото успях да обновя listView, като извиках notifyDataSetChanged() на адаптера, но в момента нито едно от тях не работи за мен. Благодаря, че разгледахте... някакви идеи!?
//1 This is how I'd normally update the listView dynamically, but not tonight.
adapter.notifyDataSetChanged();
//2 It's the same thing really, so no good.
((WaitAdapter) list.getAdapter()).notifyDataSetChanged();
//3 Saw this as the answer to a similar question, doesn't work.
adapter.getWaits().clear();
adapter.getWaits().addAll(App.getWaits());
adapter.notifyDataSetChanged();
//4 Called in onCreate but tried a 2nd time in refresh() to manually reset adapter, doesn't work.
adapter = new WaitAdapter(getHost().getApplicationContext(), App.getWaits());
list.setAdapter(adapter);
//5 Kinda the same thing, new adapter, reset adapter... also no good.
WaitAdapter adapter = new WaitAdapter(getHost().getApplicationContext(), App.getWaits());
list.setAdapter(adapter);
//6 I read ArrayAdapter keeps its own reference to initial data object but this fails too.
adapter = null;
adapter = new WaitAdapter(getHost().getApplicationContext(), App.getWaits());
list.setAdapter(adapter);
*Актуализирайте, за да споделя моя WaitAdapter.java
.
public class WaitAdapter extends ArrayAdapter<Wait> {
private LayoutInflater inflater;
private ArrayList<Wait> waits;
public WaitAdapter(Context context, ArrayList<Wait> data) {
super(context, R.layout.list_item_wait, data);
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
waits = data;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = inflater.inflate(R.layout.list_item_wait, parent, false);
holder = new ViewHolder();
holder.checkpointName = (TextView) convertView.findViewById(R.id.checkpointName);
holder.delayAmount = (TextView) convertView.findViewById(R.id.delayAmount);
holder.timeReported = (TextView) convertView.findViewById(R.id.timeReported);
holder.dateReported = (TextView) convertView.findViewById(R.id.dateReported);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
Wait wait = waits.get(position);
holder.checkpointName.setText(wait.getName());
holder.delayAmount.setText(wait.getDelayInMinutes());
holder.timeReported.setText(wait.getTimeLabel());
holder.dateReported.setText(wait.getDateLabel());
return convertView;
}
@Override
public boolean isEnabled(int position) {
return false;
}
static class ViewHolder {
TextView checkpointName;
TextView delayAmount;
TextView timeReported;
TextView dateReported;
}
}
14.12.2014 г. Актуализация: Обща информация за внедряването.
При стартиране класът App стартира WaitAsyncTask, който анализира отдалечен XML, за да запълни своите ArrayList чакания. Ще имам достъп до тези чакания на няколко места, така че по този начин ги поддържам глобални.
WaitFragment, работещ с WaitAdapter, показва чаканията в ListView и следи за промени в чаканията. Потребителите могат да публикуват чакания в уеб услугата чрез AlertDialog. Успешен отговор изпълнява отново WaitAsyncTask, актуализирайки обекта на чакане, задействайки WaitFragment refresh().
Регистрационните файлове на конзолата и уеб услугата потвърждават този поток от контрол и това изчакване се актуализира. Ако напусна WaitFragment и след това се върна, той показва актуализираните чакания. Кодът, публикуван с коментари #1-6, е това, което опитах вътре в refresh(), за да актуализирам ListView.
Използвам този общ подход с други данни и фрагменти в това приложение и техните потребителски интерфейси се опресняват по предназначение, но никой не е listView. Не съм сигурен, че мога да публикувам още източник, без да редактирам по-голямата част от него, но ще споделя констатациите си, след като го накарам да работи. Не съм имал проблеми с ListView преди, но със сигурност ще бъде нещо неудобно. Благодаря на всички, които отделиха малко време :)
waits
да не се актуализира с нови данни. - person Shvet   schedule 13.12.2014ListView
? Нещо се случва, но имаме нужда от повече код, за да разберем какво. - person Jay Soyer   schedule 13.12.2014