Android控件之ListView详解及实现分页效果
2017-09-04 19:29
477 查看
ListViewXML文件相关重要属性:
android:divider="#f9b68b" //分割线颜色 android:dividerHeight="1dp" //分割线边距 android:scrollbars="none" //不显示滚动条 android:listSelecttor="#FF00FF"//设置当选项选中的颜色 android:fadingEdge="none" 去掉上边和下边黑色的阴影
MainActivity .java
package com.example.listview_feneyi; import java.util.Vector; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.View; import android.view.ViewGroup; import android.widget.AbsListView; import android.widget.AbsListView.OnScrollListener; import android.widget.BaseAdapter; import android.widget.ListView; import android.widget.TextView; public class MainActivity extends Activity implements OnScrollListener { private ListView list; //涉及到多线程的程序最好用Vector private Vector<content> VectorContent=new Vector<content>() ; MyAdapter MyAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); list=(ListView) findViewById(R.id.list); //添加加载视图 View view=getLayoutInflater().inflate(R.layout.footerview,null); list.addFooterView(view); //给list添加刷新视图 //添加当滚动条滚动事件 list.setOnScrollListener(this); //调用循环初始化数据加载方法 initDate(); MyAdapter=new MyAdapter(); list.setAdapter(MyAdapter); } //初始化数据 private int index=1; private void initDate() { for(int i=0;i<20;i++) { content content=new content(); content.title="title"+index; content.box="title"+index; index++; VectorContent.add(content); } } class loading extends Thread{ @Override public void run() { // TODO Auto-generated method stub try { Thread.sleep(2000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } initDate(); handler.sendEmptyMessage(100); } } class MyAdapter extends BaseAdapter{ @Override public int getCount() { // TODO Auto-generated method stub return VectorContent.size(); } @Override public Object getItem(int position) { // TODO Auto-generated method stub return VectorContent.get(position); } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub ViewHolder viewholder; //减少对象创建优化 if(convertView==null) { convertView=getLayoutInflater().inflate(R.layout.content_layout, null); viewholder=new ViewHolder(); viewholder.tv1 =(TextView) convertView.findViewById(R.id.tv1); viewholder.tv2 =(TextView) convertView.findViewById(R.id.tv2); //减少对象查找优化 convertView.setTag(viewholder); }else{ viewholder=(ViewHolder) convertView.getTag(); } //获取集合中的数据 content content=VectorContent.get(position); //从集合中获取数据并给viewholder的两个TextView传值 viewholder.tv1.setText(content.title); viewholder.tv2.setText(content.box); return convertView; } class ViewHolder{ TextView tv1; TextView tv2; } } private int visivleLastIndex;//用来记录可显示的最后指数的索引; @Override public void onScrollStateChanged(AbsListView view, int scrollState) { // OnScrollListener.SCROLL_STATE_FLING; //屏幕处于甩动状态 // OnScrollListener.SCROLL_STATE_IDLE; //停止滑动状态 // OnScrollListener.SCROLL_STATE_TOUCH_SCROLL;// 手指接触状态 // 记录当前滑动状态 if(MyAdapter.getCount()==visivleLastIndex && scrollState==AbsListView.OnScrollListener.SCROLL_STATE_IDLE ) { loading loading=new loading(); loading.start(); } } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { // TODO Auto-generated method stub visivleLastIndex=firstVisibleItem+visibleItemCount-1; } private Handler handler=new Handler() { @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub super.handleMessage(msg); switch (msg.what) { case 100: MyAdapter.notifyDataSetChanged(); break; } } }; }
content .java
package com.example.listview_feneyi; public class content { String title; String box; }
小结:
优化查找的次数://使用ViewHolder 优化重复创建对象://使用convertView
使用SimpleAdapter适配器实现ListView:
实现代码:
package com.example.listview_simpleadapter; import java.util.ArrayList; import java.util.HashMap; import android.app.Activity; import android.os.Bundle; import android.widget.ListView; import android.widget.SimpleAdapter; public class MainActivity extends Activity { private ListView listView1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listView1=(ListView) findViewById(R.id.listView1); HashMap<String, Object> APP1=new HashMap<String, Object>(); APP1.put("title","电话APP"); APP1.put("icon",R.drawable.icon14); HashMap<String,Object> APP2=new HashMap<String, Object>(); APP2.put("title","记事本APP"); APP2.put("icon",R.drawable.icon28); HashMap<String,Object> APP3=new HashMap<String, Object>(); APP3.put("title","浏览器APP"); APP3.put("icon",R.drawable.icon34); ArrayList<HashMap<String,Object>> list=new ArrayList<HashMap<String,Object>>(); list.add(APP1); list.add(APP2); list.add(APP3); //参数1(上下文),参数2(List<Map集合<,>>集合),参数3(存放组件的Layout id),参数4(所对应的Map key),参数5(要存放数据的组件id), SimpleAdapter adapter=new SimpleAdapter (this, list,R.layout.items_text, new String[]{"title","icon"},new int[]{R.id.textView1,R.id.imageView}); listView1.setAdapter(adapter); } }
相关文章推荐
- Android系列之ListView实现分页和类似异步加载效果
- android 控件 swipe+recyvler实现分页效果
- Android系列之ListView实现分页和类似异步加载效果(转载)
- Android UI控件之ListView实现圆角效果
- Android中Listview实现分页加载效果OnScrollListener
- Android实现在列表List中显示半透明小窗体效果的控件用法详解
- (4.2.5) 【android开源组件】SwipeListView 详解 实现微信,QQ等滑动删除效果
- [Android UI界面] 怎样实现ListView分页效果?
- Android UI控件之ListView实现圆角效果
- Android UI控件之ListView实现圆角效果
- Android初级,实现网易云音乐歌曲列表界面效果,播放界面效果,ListView,ViewPager方法详解
- Android中Listview实现分页加载效果OnScrollListener
- Android RecyclerView详解之实现 ListView GridView瀑布流效果
- Android基本控件之listView(三)<用ListView实现分页加载>
- Android基础控件——ListView实现时间轴效果
- Android UI控件之ListView实现圆角效果
- Android控件之使用ListView实现时间轴效果
- Android基础控件——ListView实现时间轴效果
- Android中Listview实现分页加载效果OnScrollListener
- Android listview 侧滑 SwipeListView 详解 实现微信,QQ等滑动删除效果