填充列表视图片段选项卡 android
populate listview fragment tab android
我的问题是 activity 加载时我的列表视图不显示。
这是我的 activity 代码:
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);
}
这是我的片段:
@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;
}
我是 android 的新手,我不知道为什么列表视图不显示。但是,如果我点击其他选项卡,然后 return 到 tabA,列表视图会出现,我的列表视图已更新。启动时获取列表视图填充的任何解决方案?
您的网络调用需要时间来 return 您添加到数组列表的数据以片段而不是 activity 的形式执行该网络调用,一旦它被添加到数组列表就执行 notifyDataSetChanged()
在适配器上
在您当前的案例中,片段是在 returned newtwork 数据之前创建的,因此 arraylist 大小为 0
而且不需要这个
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
adapter.notifyDataSetChanged();
}
});
你可以直接调用 adapter.notifyDataSetChanged();
我的问题是 activity 加载时我的列表视图不显示。
这是我的 activity 代码:
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);
}
这是我的片段:
@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;
}
我是 android 的新手,我不知道为什么列表视图不显示。但是,如果我点击其他选项卡,然后 return 到 tabA,列表视图会出现,我的列表视图已更新。启动时获取列表视图填充的任何解决方案?
您的网络调用需要时间来 return 您添加到数组列表的数据以片段而不是 activity 的形式执行该网络调用,一旦它被添加到数组列表就执行 notifyDataSetChanged()
在适配器上
在您当前的案例中,片段是在 returned newtwork 数据之前创建的,因此 arraylist 大小为 0
而且不需要这个
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
adapter.notifyDataSetChanged();
}
});
你可以直接调用 adapter.notifyDataSetChanged();