The app works ok, but computing each listview entry takes some time (I'm doing a ping on network devices) so I'm looking for creating entries on the fly. Although I google for a solution, I'm lost: I can't find where I need to modify my code.
Also I'd like to have a textview or a progressbar to indicate the progress but all the computing is taken by the listview and I only get that ino at the end. Explanations or a tutorial would be much appreciated on these problems.
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)
Here is my adaptater:
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;
}
}
And here is where I process my data:
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();
}