Android下拉刷新与菜单及ListView的应用
来源:互联网 发布:真实二手房源 知乎 编辑:程序博客网 时间:2024/05/16 12:21
Android下拉刷新与菜单及ListView的应用
刷新组件使用的是Yalantis出品的Phoenix Pull-to-Refresh-Android
利用handle与setTag通信
网络通信获得数据信息无法在UI线程中,所以对每个菜单选项设置一个init方法启动新线程获得数据,以及一个更新Listview数据的Loading方法,这里需要注意,listview的数据更新需要在UI线程中,所以不能再init方法中直接更新List数据,否则会产生不可预见的运行时异常。网络线程在完成后发送Message至UI线程,在UI线程中Handler获得信息调用各菜单选项的Load方法
private Handler mHandler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); //获得刚才发送的Message对象,然后在这里进行UI操作 Log.d("result",Integer.toString(msg.what)+"load"); switch (msg.what){ case 1: loadBanji((String)msg.obj); break; } } };public void initBanji(){ new Thread(){ @Override public void run() { jsonArray=HttpClient.getClassList(); Message message=new Message(); message.what=1; message.obj=jsonArray.toString(); mHandler.sendMessage(message); } }.start(); } public void loadBanji(String jsonArrayStr){ classList.clear(); Log.d("result",jsonArrayStr); JSONArray jsonArray= null; try { jsonArray = new JSONArray(jsonArrayStr); for (int i=0;i<jsonArray.length();i++){ JSONObject jsonObject=jsonArray.getJSONObject(i); classList.add(new Class(jsonObject.getInt("id"),jsonObject.getString("name"))); } } catch (JSONException e) { e.printStackTrace(); } ClassAdapter adapter=new ClassAdapter(this,R.layout.class_layout,classList); listView.setAdapter(adapter); listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Class aclass=classList.get(position); Intent intent=new Intent(HomeTeacherActivity.this,ClassStudentActivity.class); intent.putExtra("id",aclass.getId()); intent.putExtra("name",aclass.getName()); startActivity(intent); } }); }
当切换菜单选项时,给navigationView设置setTag,用以在刷新时调用对应的init方法
mPullToRefreshView = (PullToRefreshView) findViewById(R.id.content_teacher).findViewById(R.id.teacher_refresh); mPullToRefreshView.setOnRefreshListener(new PullToRefreshView.OnRefreshListener() { @Override public void onRefresh() { mPullToRefreshView.postDelayed(new Runnable() { @Override public void run() { Log.d("result","Navigation"+(String)navigationView.getTag()); switch ((String)navigationView.getTag()){ case "banji": initBanji(); break; } mPullToRefreshView.setRefreshing(false); } },500); } }); public boolean onNavigationItemSelected(MenuItem item) { // Handle navigation view item clicks here. int id = item.getItemId(); if (id == R.id.nav_banji) { // Handle the camera action initBanji(); navigationView.setTag("banji"); } else if (id == R.id.nav_lianxi) { navigationView.setTag("lianxi"); } else if (id == R.id.nav_zuoye) { navigationView.setTag("zuoye"); } else if (id == R.id.nav_exam) { navigationView.setTag("exam"); } else if (id == R.id.nav_fenshu) { navigationView.setTag("fenshu"); }else if (id==R.id.nav_Logout){ Intent intent=new Intent(HomeTeacherActivity.this,LoginActivity.class); startActivity(intent); finish(); } DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); drawer.closeDrawer(GravityCompat.START); return true; }
总结
在自己开发app中,遇到了Listview数据更新在子线程中会在某次中产生异常,仅此来记录一下自己掉过的坑。
阅读全文
0 0
- Android下拉刷新与菜单及ListView的应用
- android listview 的下拉刷新
- Android listView的下拉刷新
- Android ListView的下拉刷新
- Android 下拉刷新与 ListView冲突问题
- Android ListView下拉刷新
- android Listview下拉刷新
- Android ListView下拉刷新
- Android-ListView 下拉刷新
- android listview下拉刷新!
- android listview下拉刷新
- Android ListView下拉刷新
- Android ListView 下拉刷新
- Android ListView下拉刷新
- android ListView下拉刷新
- 为自己记------android中listview下拉刷新和下拉加载的原理及简单实现
- Android中ListView的下拉刷新(二)
- Android中ListView的下拉刷新
- [LeetCode] Longest Increasing Subsequence 最长递增子序列的长度
- winform气泡提示
- 目标跟踪算法 分类
- C++基础语言(1)2017.6.12
- [Unity&C#]变量太多,如何模块化显示
- Android下拉刷新与菜单及ListView的应用
- APP转让时提示:您必须移除要转让的 App 的所有构建版本和测试员,并清除“测试信息”下的所有信息
- Android( 基本控件)、progressBar+Handler(进度条)、AutoCompleteTextView(单行自动补全)、MultiAutoCompleteTextView(多行补全)
- ScrollView嵌套Listview,你会遇到的问题(1)!
- Alfresco文档管理系统 文档
- 决策树算法原理及案例
- android 自定义viewPager 下标
- http请求
- 【Android学习】自定义View的实现----以圆形图片控件为例