您的位置:首页 > 移动开发 > Android开发

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);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息