首页 > 学院 > 开发设计 > 正文

Xlistview实现上拉刷新下拉加载及item可单选

2019-11-09 15:08:57
字体:
来源:转载
供稿:网友

实现思路: 1.首先要准备并拷入Xlistview的源代码或者jar包,新建一个项目XlistviewDemo对Xlistview的源代码形成依赖。 2.准备Xlistview的主布局文件Xlistview_layout.xml中添加Xlistview控件。 3.准备Xlistview的Item布局文件Xlistview_item.xml,里面两个控件,一个放数据,一个放点击可显示的单选图标。 4.新建一个adapter包和MyBaseAdapter继承BaseAdapter。(并优化) 5.在主activity中声明并注册Xlistview,初始化数据源和适配器,并设置给Xlistview实现代码。(至此已实现listview)。最后让Mainactivity实现IXListViewListener接口,重写两个方法实现上拉刷新和下拉加载功能。


1.首先要准备并拷入Xlistview的源代码或者jar包,新建一个项目XlistviewDemo对Xlistview的源代码形成依赖。

拷入源代码形成依赖的方法待完善

2.准备Xlistview的主布局文件Xlistview_layout.xml中添加Xlistview控件。

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools" android:id="@+id/ll"android:layout_width="match_parent" android:layout_height="match_parent"tools:context="com.soft.qianyu.swipeviewdemo.MainActivity"> <me.maxwin.view.XListView android:id="@+id/xListView" android:layout_width="match_parent" android:layout_height="match_parent"> </me.maxwin.view.XListView></LinearLayout>

在外围用LinearLayout包裹Xlistview(注意布局和Xlistview都要设置id)。


3.准备Xlistview的Item布局文件Xlistview_item.xml,里面两个控件,一个放数据,一个放点击可显示的单选图标。

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent"><TextView android:id="@+id/text" android:layout_width="0dp" android:layout_weight="9" android:layout_height="wrap_content" android:textSize="35sp" android:gravity="center" /> <TextView android:id="@+id/select_tv" android:visibility="invisible" android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:text="√" android:textColor="@color/colorAccent" android:gravity="center" android:textSize="35sp" /></LinearLayout>

两个TextView一个放置数据,另外一个点击会改变visitible属性。


4.新建一个adapter包和MyBaseAdapter继承BaseAdapter。(并优化)

public class MyBaseAdapter extends BaseAdapter { //一个BaseAdapter需要数据源和打气筒,所以先声明两个变量 ArrayList<String> datas; LayoutInflater inflater; //为了能定位到点击的位置,所以先声明一个选中项的位置常量 public int selectedPosition = 0 ; //提供BaseAdapter适配器的构造器 public MyBaseAdapter(ArrayList<String> datas, Context context){ this.datas = datas; //inflater对象是从上下文中来获取来的 inflater = LayoutInflater.from(context); } //获得数据源的总数 @Override public int getCount() { return datas==null?0:datas.size(); } //获得指定位置的数据源 @Override public Object getItem(int position) { //如果数据源为空,返回为空 return datas==null?null:datas.get(position); } //获得指定位置的item的下标 @Override public long getItemId(int position) { return position; } //加载item布局并展示数据 @Override public View getView(int position, View convertView, ViewGroup viewGroup) { //为实现单布局加载和缓存控件,先要声明者两个变量 View view; ViewHolder holder;//实现单布局加载if (convertView==null){view=inflater.inflate(R.layout.xlistview_item,null);//实现缓存控件holder = new ViewHolder();holder.text = (TextView) view.findViewById(R.id.text);holder.select_tv = (TextView) view.findViewById(R.id.select_tv); //将holder与view绑定缓存 view.setTag(holder); }else { //直接显示控件 view = convertView ; holder = (ViewHolder) view.getTag(); } //获得指定位置的数据,若定位的是所选控件,则改变它的visible属性。 String data = datas.get(position); if(selectedPosition== position) { holder.select_tv.setVisibility(View.VISIBLE); }else { holder.select_tv.setVisibility(View.INVISIBLE); } //将数据展示出来 holder.text.setText(data); return view; } //缓存控件的ViewHolder类 class ViewHolder{ TextView text ; TextView select_tv; }}

5.在MainActivity中声明并注册Xlistview,初始化数据源和适配器,并设置给Xlistview实现代码。(至此将实现listview基本效果)

//implements XListView.IXListViewListener的意思是将会提供刷新和加载这两个方法让你进行重写,你只要在里面放入你要处理的数据就可以了。public class MainActivity extends Activity implements XListView.IXListViewListener {//首先声明各个变量,包括Xlistview控件,数据源datas,适配器adapter等//flag表示你每次刷新的时候的标记。 ArrayList<String> datas; MyBaseAdapter adapter; XListView xListView; boolean flag = false; @Override PRotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //初始化方法 init(); }//进行初始化 private void init() { //初始化xlistview xListView = (XListView) findViewById(R.id.xListView); //初始化数据源和数据 datas = new ArrayList<String>(); getData1(); //初始化适配器并为Xlistview绑定适配器 adapter = new MyBaseAdapter(datas,MainActivity.this); xListView.setAdapter(adapter);//以上方法即可实现简单类似listview的展示效果,以下就是上拉刷新下拉加载的代码部分 //为xlistview设置监听事件,重写刷新加载的两个方法 xListView.setXListViewListener(this); //设置xlistview允许上拉加载更多 xListView.setPullLoadEnable(true); //设置xlistview的item点击事件,显示单选功能 xListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {//点击item的时候讲adapter的selectedPosition的值设定为当前点击的item位置(因为xlistview有个默认的标题栏占据了一个位置,所以要减1)adapter.selectedPosition = position-1 ;//只要是adapter里面的数据发生了变化就必须要调用notifyDataSetChanged通知改变 adapter.notifyDataSetChanged(); } }); }//初始化的数据 private void getData1() { datas.add("赵云"); datas.add("关羽"); datas.add("刘备"); datas.add("曹操"); datas.add("貂蝉"); datas.add("吕布"); datas.add("李师师"); } //刷新的数据 private void getData2() { datas.add("常胜将军"); datas.add("汉寿亭候"); datas.add("仁君"); datas.add("奸雄"); datas.add("三国美女"); datas.add("三国无双"); datas.add("古代美女"); }//重写上拉刷新的方法 @Override public void onRefresh() { //刷新时候要先清空数据源 datas.clear(); //判断flag,免得每次刷新的时候都是一个数据 if (flag){ getData1(); }else { getData2(); } //重置flag,确保下次刷新时是不一样的数据 flag=!flag; //通知适配器数据源发生了改变。 adapter.notifyDataSetChanged(); //停止刷新功能 xListView.stopRefresh(); }//重写下拉加载方法 @Override public void onLoadMore() { //这里就不需要清空数据源了,直接是getdata()里add数据 //加个flag,免得每次刷新都是一样的数据 if (flag){ getData1(); }else { getData2(); } flag=!flag; //通知适配器数据源发生了改变 adapter.notifyDataSetChanged(); //关闭下拉加载方法 xListView.stopLoadMore(); }}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表