Это происходит очень часто, но я действительно не знаю, что делать сейчас.notifyDataSetChanged() не работает после добавления
Вот код из фрагмента:
общественного класса MainFragment расширяет фрагмент {
private ListView listView;
private static TicketsAdapter ticketsAdapter;
private static ArrayList<Ticket> tickets = new ArrayList<Ticket>();
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
final View view = inflater.inflate(R.layout.fragment_main, container, false);
listView = (ListView) view.findViewById(R.id.list_tickets);
ticketsAdapter = new TicketsAdapter(tickets);
listView.setAdapter(ticketsAdapter);
return view;
}
public static void addTicket(Ticket ticket){
tickets.add(ticket);
ticketsAdapter.notifyDataSetChanged();
Log.d(A.TAG,"tickets =" + tickets.size());
}
}
Теперь журнал показывает, что количество приращения билетов, но ListView не обновляется
вот адаптер:
public class TicketsAdapter extends BaseAdapter {
private ArrayList<Ticket> tickets = new ArrayList<Ticket>();
private LayoutInflater lInflater;
private ViewHolder viewHolder;
public TicketsAdapter(ArrayList<Ticket> tickets){
this.tickets.clear();
this.tickets.addAll(tickets);
lInflater = (LayoutInflater) MainActivity.getActivity()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null){
convertView = lInflater.inflate(R.layout.list_item, parent, false);
viewHolder = new ViewHolder();
//finding views etc
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
Ticket ticket = (Ticket) getItem(position);
//Showing data on views
return convertView;
}
@Override
public int getCount() {
return tickets.size();
}
@Override
public Object getItem(int position) {
return tickets.get(position);
}
@Override
public long getItemId(int position) {
return Long.parseLong(tickets.get(position).getId());
};
static class ViewHolder{
//bunch of views
}
}
Удалить 'this.tickets.clear(); this.tickets.addAll (билеты); 'в вашем адаптере и поместите это' this.tickets = tickets; ' –
да, это работает. но почему? – user2976267
Это не та же переменная, поэтому, когда вы добавляете элемент в свой фрагмент, это не добавляет его в адаптер, потому что это не тот же список. Теперь это то же самое. –