My problem here is that my listview doesn't show when the activity loads.
Here is my activity code :
protected void onCreate(Bundle savedInstanceState) {
...
TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout);
tabLayout.addTab(tabLayout.newTab().setText("A"));
tabLayout.addTab(tabLayout.newTab().setText("B"));
tabLayout.addTab(tabLayout.newTab().setText("C"));
tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
getServices();
final ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
final PagerAdapter adapter = new PagerAdapter
(getSupportFragmentManager(), tabLayout.getTabCount());
viewPager.setAdapter(adapter);
adapter.notifyDataSetChanged();
viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
viewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
adapter.notifyDataSetChanged();
}
public void getServices(){
RequestQueue queue;
queue = Volley.newRequestQueue(this);
String url = "http://..."
JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(Request.Method.GET,url,
new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
for(int i=0;i<response.length();i++){
try{
JSONObject jsonObjectService = response.getJSONObject(i);
Service service = new Service(jsonObjectService);
serviceList.add(service);
}
catch(JSONException e){
e.printStackTrace();
}
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
});
queue.add(jsonArrayRequest);
}
And here my fragment :
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
v = inflater.inflate(R.layout.fragment_tab_fragment1, container, false);
activity = (SalonInformationsActivity) getActivity();
listView = (ListView) v.findViewById(R.id.list_service);
serviceList = activity.getServiceList();
adapter = new ServiceListAdapter(activity, serviceList);
listView.setAdapter(adapter);
adapter.notifyDataSetChanged();
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
adapter.notifyDataSetChanged();
}
});
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
((SalonInformationsActivity)getActivity()).callSalon(v.findFocus());
//Toast.makeText(getApplicationContext(), salonArrayList.get(position).getTel(), Toast.LENGTH_SHORT).show();
}
});
return v;
}
I'm new to android and i don't know why the listview doesn't show. But if i clic on other tab then return to the tabA the listview appears with my listview updated. Any solution to get the listview fill when it starts ?
Your network call is taking time to return data that you add to your arraylist perform that network call in fragment instead of activity and once it is added to arraylist perform notifyDataSetChanged()
on adapter
In your current case fragment is getting created before newtwork data is returned so that arraylist size is 0
and there is no need of this
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
adapter.notifyDataSetChanged();
}
});
you can simply call adapter.notifyDataSetChanged();