相信很多人都很习惯使用list view,因为它的有点有很多,但今天介绍一下XListView的使用,相信很多人已经使用过,只是菜鸟我才知道,废话不多说了,
一.github地址
二.使用
1.首先将这三个类导入到你的工程中:
2.MainActivity的布局文件:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.administrator.xlistviewdemo.MainActivity">
<com.example.administrator.xlistviewdemo.view.XListView
android:id="@+id/xlistview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:cacheColorHint="#00000000"
android:scrollbars="none" />
</RelativeLayout>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
3.MainActivity中:
public class MainActivity extends Activity implements XListView.IXListViewListener {
private XListView mListView;
private ArrayList<String> datas;
private Handler mHandler;
private MainAdapter mainAdapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mListView = (XListView) findViewById(R.id.xlistview);
mainAdapter = new MainAdapter(this);
datas = new ArrayList<>();
mHandler = new Handler();
//设置数据
geneItems();
//可使用上拉刷新
mListView.setPullLoadEnable(true);
mListView.setAdapter(mainAdapter);
mListView.setXListViewListener(this);
//设置item的点击事件
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
//这里的i-1,是因为头视图占了一个position
Toast.makeText(MainActivity.this, "i:" + (i - 1), Toast.LENGTH_SHORT).show();
}
});
//设置长按事件
mListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> adapterView, View view, int i, long l) {
Toast.makeText(MainActivity.this, "长按事件 i:" + (i-1), Toast.LENGTH_SHORT).show();
return false;
}
});
//添加头布局
View view = getLayoutInflater().inflate(R.layout.head_view, null);
mListView.addHeaderView(view);
//添加尾视图
View view2 = getLayoutInflater().inflate(R.layout.head_view, null);
mListView.addFooterView(view2);
//设置禁止上拉
//mListView.setPullLoadEnable(false);
//设置禁止下拉
//mListView.setPullRefreshEnable(false);
}
private void geneItems() {
for (int i = 0; i <= 20; i++) {
datas.add("refresh item " + i);
}
mainAdapter.setDatas(datas);
}
//下拉刷新
@Override
public void onRefresh() {
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
datas.clear();
geneItems();
// mAdapter.notifyDataSetChanged();
mainAdapter = new MainAdapter(MainActivity.this);
mainAdapter.setDatas(datas);
mListView.setAdapter(mainAdapter);
onLoad();
}
}, 2000);
}
//上拉加载
@Override
public void onLoadMore() {
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
geneItems();
mainAdapter.notifyDataSetChanged();
onLoad();
}
}, 2000);
}
xlv.stopRefresh();//停止刷新
xlv.stopLoadMore();//停止加载
private
void onLoad() { mListView.stopRefresh(); mListView.stopLoadMore();
//获取当前时间 Date curDate =
new Date(System.currentTimeMillis());
//格式化 SimpleDateFormat formatter =
new SimpleDat}); String time = formatter.format(curDate); mListView.setRefreshTime(time); } }
4.Adapter适配器中
package com.example.lenovo.xlistviewbegin;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import com.nostra13.universalimageloader.core.ImageLoader;
import java.util.List;
import static android.R.attr.type;
public class MyAdapter extends BaseAdapter {
private Context context;
private List<NewsBean> list;
private final int atype=0;//第一种布局
private final int btype=1;//第二种布局
public MyAdapter(Context context,List<NewsBean> list) {
this.context = context;
this.list = list;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int i) {
return list.get(i);
}
@Override
public long getItemId(int i) {
return 0;
}
//定义布局类型
@Override
public int getItemViewType(int position) {
//如果为偶数的话,取atype类型
if(position%2==0)
{
return atype;
}
else
{
return btype;
}
}
//定义布局数量
@Override
public int getViewTypeCount() {
return 2;
}
@Override
public View getView(int i, View view, ViewGroup viGroup) {
//根据position获取布局类型
int type = getItemViewType(i);
ViewHolder1 holder1=null;
ViewHolder2 holder2=null;
if(view==null) {
switch (type) {
case atype:
holder1 = new ViewHolder1();
view = View.inflate(context, R.layout.item1, null);
view.setTag(holder1);
holder1.iv1 = view.findViewById(R.id.iv1);
holder1.tv1 = view.findViewById(R.id.tv1);
break;
case btype:
holder2 = new ViewHolder2();
view = View.inflate(context, R.layout.item2, null);
view.setTag(holder2);
holder2.iv2 = view.findViewById(R.id.iv2);
holder2.tv2 = view.findViewById(R.id.tv2);
break;
}
}
else
{
switch (type)
{
case atype:
holder1=(ViewHolder1) view.getTag();
break;
case btype:
holder2=(ViewHolder2) view.getTag();
break;
}
}
switch (type)
{
case atype:
holder1.tv1.setText(list.get(i).getTitle());
ImageLoader.getInstance().displayImage(list.get(i).getImag(),holder1.iv1);
break;
case btype:
holder2.tv2.setText(list.get(i).getTitle());
ImageLoader.getInstance().displayImage(list.get(i).getImag(),holder2.iv2);
break;
}
return view;
}
class ViewHolder1
{
public ImageView iv1;
public TextView tv1;
}
class ViewHolder2
{
public ImageView iv2;
public TextView tv2;
}
}