Xlistview实现上拉刷新下拉加载及item可单选
2017-02-10 11:49
435 查看
实现思路:
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控件。
在外围用LinearLayout包裹Xlistview(注意布局和Xlistview都要设置id)。
3.准备Xlistview的Item布局文件Xlistview_item.xml,里面两个控件,一个放数据,一个放点击可显示的单选图标。
两个TextView一个放置数据,另外一个点击会改变visitible属性。
4.新建一个adapter包和MyBaseAdapter继承BaseAdapter。(并优化)
5.在MainActivity中声明并注册Xlistview,初始化数据源和适配器,并设置给Xlistview实现代码。(至此将实现listview基本效果)
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.se 4000 lect_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(); } }
相关文章推荐
- 仿QQ实现ListView中item的左右滑动同时实现ListView的上拉刷新和下拉加载更多
- 通过XListView实现上拉加载下拉刷新
- banner实现无限轮播+下拉刷新上拉加载+ 下拉时 listview 和轮播图一起刷新
- Android自定义listview布局实现上拉加载下拉刷新功能
- SUI 实现上拉刷新,下拉加载更多通用ListView
- android 自定义listview——实现上拉刷新下拉加载的功能
- RecyclerView实现上拉刷新,下拉加载,item点击事件
- Android自定义View之快速实现下拉刷新, 点击加载更多ListView
- Android通过XListView实现上拉加载下拉刷新功能
- 实现ListView的上拉刷新和下拉加载
- 点击侧滑任何一个 菜单项,请求网络数据展示在主界面的xlistview中且实现下拉刷新效果和上拉加载的分页加载数据效果
- BGARefreshLayout与ListView结合使用实现上拉刷新和下拉加载更多
- ListView上拉加载和下拉刷新多种实现方式
- Listview利用librarypull实现上拉刷新下拉加载
- ListView上拉加载和下拉刷新多种实现方式
- 一步一步实现ListView加载网络数据,下滑底部加载,顶部下拉刷新。并配有双缓存
- Android知识点八(sqllite数据库操作,以及sqlite+handler+XListView实现上拉刷新下拉加载)
- 自定义ListView 实现上拉刷新 下拉加载数据
- 实现app上对csdn的文章列表上拉刷新下拉加载以及加入缓存文章列表的功能 (制作csdn app 四)
- 下拉刷新及滚动到底部加载更多的Listview使用