ListView появляется в одном кадре, тогда как я хотел бы появляться на лету

Приложение работает нормально, но вычисление каждой записи в списке занимает некоторое время (я выполняю пинг на сетевых устройствах), поэтому я ищу создание записей на лету. Хотя я ищу решение в Google, я теряюсь: я не могу найти, где мне нужно изменить свой код.

Также я хотел бы иметь текстовое представление или индикатор выполнения, чтобы указать прогресс, но все вычисления выполняются списком, и я получаю только это ino в конце. Объяснения или учебник будут высоко оценены по этим проблемам.

listIPitem = new ArrayList<>();

iPadaptater = new IPadaptater(getActivity(), listIPitem);
ListView list_ip = (ListView) rootView.findViewById(id.listIP);
list_ip.setAdapter(iPadaptater);
DiscoverNetwork dn = new DiscoverNetwork();
dn.passContext(context, listIPitem, iPadaptater)

Вот мой адаптер:

public class IPadaptater extends BaseAdapter {

    private List<IPitem> listIPitem;
    private LayoutInflater layoutInflater;
    Context context;

    public IPadaptater(Context c, List<IPitem> objects) {
        context = c;
        listIPitem = objects;
        layoutInflater = LayoutInflater.from(context);
    }

    public int getCount() {
        return listIPitem.size();
    }

    public Object getItem(int position) {
        return listIPitem.get(position);
    }

    public long getItemId(int position) {
        return position;
    }

    private class ViewIPHolder {
        TextView ip_disc;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        ViewIPHolder viewHolder;

        if(convertView == null) {
            viewHolder = new ViewIPHolder();

            convertView = layoutInflater.inflate(R.layout.listview_item_discovery, null);

            viewHolder.ip_disc = (TextView) convertView.findViewById(R.id.ip_disc);

            convertView.setTag(viewHolder);
        } else {
            viewHolder = (ViewIPHolder) convertView.getTag();
        }
        viewHolder.ip_disc.setText(listIPitem.get(position).getIPaddress());

        notifyDataSetChanged();

        return convertView;
    }

}

И вот где я обрабатываю свои данные:

   listIPitem.clear();


    for(int i=1;i<50;i++) {

        IPitem iPitem = new IPitem();
        ip = network + i;
        if(!ping(ip)) continue;
        iPitem.setIPaddress(ip);
        listIPitem.add(iPitem);
        iPadaptater.notifyDataSetChanged();
    }

person narb    schedule 29.10.2016    source источник
comment
1) используйте RecyclerView, если вы хотите анимировать вставку данных 2) не нужно вызывать notifyDataSetChanged в getView. 3) цикл for будет перебирать все 50 элементов менее чем за несколько секунд, так что именно вы хотите увидеть?   -  person OneCricketeer    schedule 29.10.2016
comment
Кроме того, что делает ping? Если это AsyncTask, это займет время. Что касается индикатора выполнения, есть ли он в вашем макете XML?   -  person OneCricketeer    schedule 29.10.2016
comment
Ну это должно идти по сети 254 устройства. Это может занять от 15 секунд до пары минут. Я собирался использовать метод isReachable, но он ненадежен. Итак, я подумал о том, чтобы выполнить команду ping.   -  person narb    schedule 29.10.2016
comment
Спасибо за комментарии: попробую поискать recycleviewer. хорошо для комментария 2.   -  person narb    schedule 29.10.2016
comment
Да, сначала я не увидел метод ping, так что да, это может занять больше времени. Я думаю, что isReachable эквивалентно пингу   -  person OneCricketeer    schedule 29.10.2016
comment
Возможно, я неправильно понял, что вы хотели, но что касается анимации. вставить эффект анимации"> stackoverflow.com/questions/28986269/   -  person OneCricketeer    schedule 29.10.2016
comment
просто для ясности, потому что это может занять много времени, я хочу показать запись в списке, которая соответствует пингуемому устройству. Я не хочу ждать до конца, чтобы показать полный список.   -  person narb    schedule 29.10.2016
comment
Я хочу показать их 1 на 1....   -  person narb    schedule 29.10.2016
comment
Хорошо, тогда я понял. Я просто не думаю, что метод ping блокирует или находится в другом потоке, например   -  person OneCricketeer    schedule 29.10.2016
comment
Давайте продолжим обсуждение в чате.   -  person narb    schedule 29.10.2016