相关栏目: 程序开发 当前位置:主页 > 程序开发 >

整合了刷新、加载更多、滑动删除功能的XListview,滑动xlistview

发布时间:2019-02-06 作者:admin 分类:程序开发

整合了刷新、加载更多、滑动删除功能的XListview,滑动xlistview

    转载请说明出处:http://blog.csdn.net/bz419927089


    如果想做带有刷新、加载更多功能的listview,我们可以使用XListview。(已经停止维护,github地址:https://github.com/Maxwin-z/XListView-Android)

    如果想做带有滑动删除功能的listview,我们可以使用SwipeListview。(github地址:https://github.com/47deg/android-swipelistview)

    如果想做刷新、加载更多、滑动删除的listview呢?抱歉,我暂时还没有发现同时拥有这些功能的listview。不过,我们可以整合多个开源项目,做出这样的效果。

    如果要实现这个功能,我们需要两个开源项目的配合,一个就是XListview,来实现刷新加载功能,而滑动删除功能,我们则需要另外一个大神的开源项目,AndroidSwipeLayout(github地址:https://github.com/daimajia/AndroidSwipeLayout)。

    话不多说,我们先看一下做出来的效果。



    daimajia.swipe是AndroidSwipeLayout的代码,me.maxwin.view是XListview的代码,不需要再导入其他的lib包了。

    layout文件夹下面的xlistview_footer,xlistview_header是XListview项目需要的布局文件,values文件夹下面的attrs是

SwipeLayout一些预置参数,colors是用到的两个颜色值,strings是XListview用到的字符串常量。

    介绍完一些重要的文件夹,我们看一下ListViewAdapter的代码实现。

    

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;

import com.daimajia.swipe.SimpleSwipeListener;
import com.daimajia.swipe.SwipeLayout;
import com.daimajia.swipe.adapters.BaseSwipeAdapter;

/**
 * 
 * @author zhaokaiqiang
 * 
 */
public class ListViewAdapter extends BaseSwipeAdapter {

	// 上下文对象
	private Context mContext;

	// 构造函数
	public ListViewAdapter(Context mContext) {
		this.mContext = mContext;
	}

	// SwipeLayout的布局id
	@Override
	public int getSwipeLayoutResourceId(int position) {
		return R.id.swipe;
	}

	@Override
	public View generateView(int position, ViewGroup parent) {
		View v = LayoutInflater.from(mContext).inflate(R.layout.listview_item,
				parent, false);
		final SwipeLayout swipeLayout = (SwipeLayout) v
				.findViewById(getSwipeLayoutResourceId(position));
		// 当隐藏的删除menu被打开的时候的回调函数
		swipeLayout.addSwipeListener(new SimpleSwipeListener() {
			@Override
			public void onOpen(SwipeLayout layout) {
				Toast.makeText(mContext, "Open", Toast.LENGTH_SHORT).show();
			}
		});
		// 双击的回调函数
		swipeLayout
				.setOnDoubleClickListener(new SwipeLayout.DoubleClickListener() {
					@Override
					public void onDoubleClick(SwipeLayout layout,
							boolean surface) {
						Toast.makeText(mContext, "DoubleClick",
								Toast.LENGTH_SHORT).show();
					}
				});
		// 添加删除布局的点击事件
		v.findViewById(R.id.ll_menu).setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View arg0) {
				Toast.makeText(mContext, "delete", Toast.LENGTH_SHORT).show();
				//点击完成之后,关闭删除menu
				swipeLayout.close();
			}
		});
		return v;
	}

	//对控件的填值操作独立出来了,我们可以在这个方法里面进行item的数据赋值
	@Override
	public void fillValues(int position, View convertView) {
		TextView t = (TextView) convertView.findViewById(R.id.position);
		t.setText((position + 1) + "."<p class="p1"><span class="s1"> + </span>"我就是一行很长很长很长很长很长很长很长很长很长很长很长很长很长的测试文本"</p>);
	}

	@Override
	public int getCount() {
		return 20;
	}

	@Override
	public Object getItem(int position) {
		return position;
	}

	@Override
	public long getItemId(int position) {
		return position;
	}
}
    

    如果我们想使用带有滑动布局的listvew,我们需要继承BaseSwipeAdapter,然后对上面代码中提到的重要方法进行实现。

    除了adapter需要改变之外,我们还需要修改listview的item的布局文件。

    下面是listview_item.xml的代码实现。

    

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="80dp" >

    <com.daimajia.swipe.SwipeLayout
        android:id="@+id/swipe"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >

        <LinearLayout
            android:id="@+id/ll_menu"
            android:layout_width="100dp"
            android:layout_height="match_parent"
            android:background="@android:color/holo_red_light"
            android:gravity="center" >

            <ImageView
                android:id="@+id/trash"
                android:layout_width="25dp"
                android:layout_height="25dp"
                android:src="@drawable/trash" />

            <TextView
                android:id="@+id/delete"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="删除"
                android:textColor="#ffffff"
                android:textSize="15sp" />
        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@drawable/item_selector"
            android:padding="6dp" >

            <TextView
                android:id="@+id/position"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />
        </LinearLayout>
    </com.daimajia.swipe.SwipeLayout>

</LinearLayout>

    整个item的布局内容需要用SwipeLayout包裹起来,然后添加id,这个id我们需要在adapter里面作为

getSwipeLayoutResourceId()的返回值。

    设置好adapter之后,我们就可以在MainActivity里面为我们的xlistview添加适配器了,下面是一个简单的例子。

package com.example.swiperefreshloadlistview;

import me.maxwin.view.XListView;
import me.maxwin.view.XListView.IXListViewListener;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.widget.Toast;

/**
 * 
 * @author zhaokaiqiang
 * 
 */
public class MainActivity extends Activity {

	private XListView mListView;
	// 只是用来模拟异步获取数据
	private Handler handler;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		handler = new Handler();
		mListView = (XListView) findViewById(R.id.xListView);
		// 设置xlistview可以加载、刷新
		mListView.setPullLoadEnable(true);
		mListView.setPullRefreshEnable(true);
		// 设置回调函数
		mListView.setXListViewListener(new IXListViewListener() {

			@Override
			public void onRefresh() {
				// 模拟刷新数据,1s之后停止刷新
				handler.postDelayed(new Runnable() {

					@Override
					public void run() {
						mListView.stopRefresh();
						Toast.makeText(MainActivity.this, "refresh",
								Toast.LENGTH_SHORT).show();
					}
				}, 1000);
			}

			@Override
			public void onLoadMore() {
				handler.postDelayed(new Runnable() {
					// 模拟加载数据,1s之后停止加载
					@Override
					public void run() {
						mListView.stopLoadMore();
						Toast.makeText(MainActivity.this, "loadMore",
								Toast.LENGTH_SHORT).show();
					}
				}, 1000);

			}
		});
		// 设置适配器
		mListView.setAdapter(new ListViewAdapter(this));
	}

}

    好了,完成这些之后,我们就实现了刷新、加载、滑动删除功能的多功能lixtview了。

    项目的源代码,请到我的github下载。

    https://github.com/ZhaoKaiQiang/SwipeRefreshLoadListview


自定义ImageView控件 ,通过响应用户的滑动事实现转盘的功可以 ,怎同步刷新XML中其他TextVew控件的显示?

@Override
public void draw(Canvas canvas) {
// 你的代码

super.draw(canvas);

}
 
已经使用ViewPager实现了滑动的效果,但是发现想在每个子页中增加功可以,子页中的按钮事件不可以被监听到

这个呢,我通常是写一个对应的ViewHolder类来处理。
比如你可以建一个CalculatorViewHolder.java来处理任何跟这个页面相关的事件和初始化等操作。在CalculatorViewHolder这个类中,写一个构造方法,把必须要传入的参数填上,比如Context之类的。然后必须要有一个getView方法,返回一个View,供viewpager加入到List<View>里。
像这样:
    public View getView(){setView();findViewsById();initViews();addListeners();return view;}在你的NewoneActivity中,先定义一个CalculatorViewHolder对象,new的时候传入对应的参数,需要得到此view的时候就写holder.getView()。当然,如果要在NewoneActivity中对此界面做一些操作,可以在CalculatorViewHolder中写几个public的方法,然后这样调用就好了
holder.mothed();

这样单独一个类的好处是降低偶合,而且代码条理更清晰。

 

http://www.bkjia.com/Androidjc/889381.htmlwww.bkjia.comtruehttp://www.bkjia.com/Androidjc/889381.htmlTechArticle整合了刷新、加载更多、滑动删除功能的XListview,滑动xlistview 转载请说明出处:http://blog.csdn.net/bz419927089 如果想做带有刷新、加载更多功能...

本文源自: 凯发国际

上一篇:【Android 应用开发】 ActionBar 样式详解,androidactionbar 下一篇:没有了

Copyright © 2005-2016 http://www.owlpma.com 凯发国际_凯发国际开户礼金_凯发注册送_新浪娱乐版权所有 凯发国际_凯发国际开户礼金_凯发注册送_新浪娱乐