SwipeListView的简单用法

近做软件的时候需要用到listView但是传统的ListView感觉已经无法满足我了,于是我去git上搜了下listview的开源框架,大部分关于listview的开源框架都是牵扯到下拉刷新的我也不否认这个确实很重要,但是我现在用不上 ,于是搜索很久后终于收到个好玩叫SwipeListView,这个的主要作用是listview的每一行可以通过手指控制向右或向左滑动到哪个位子比如1/3或1/2停下来,再空白的地方也可以放些布局,比较好玩。

具体的实现方法是下载个swipelistView的项目,将项目


然后在布局文件中添加代码:

    <com.example.listviewdemo.SwipeListView
        
        android:id="@+id/example_lv_list"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="2"
        android:listSelector="#00000000"
        swipe:swipeActionLeft="reveal"
        swipe:swipeActionRight="reveal"
        swipe:swipeAnimationTime="0"
        swipe:swipeBackView="@+id/back"
        swipe:swipeCloseAllItemsWhenMoveList="true"
        swipe:swipeFrontView="@+id/front"
        swipe:swipeMode="both"
        swipe:swipeOffsetLeft="0dp"
        swipe:swipeOffsetRight="0dp"
        swipe:swipeOpenOnLongPress="false" />

在主界面的oncreate方法中添加代码
<span style="white-space:pre">			</span>setContentView(R.layout.activity_main);
			SwipeListView mSwipeListView = (SwipeListView) findViewById(R.id.example_lv_list);
			testData = getTestData();
			SwipeAdapter mAdapter = new SwipeAdapter(this, R.layout.package_row, testData,
					mSwipeListView);
			deviceWidth = getDeviceWidth();
			mSwipeListView.setAdapter(mAdapter);
			reload();
其中SwipeAdapter是适配器的代码是:
public class SwipeAdapter extends ArrayAdapter<String> {
	private LayoutInflater mInflater;
	private List<String> objects;
	private AlertDialog dialog;
	private SwipeListView mSwipeListView;
	List<News> lista=DataSupport.findAll(News.class);
	
	
	public SwipeAdapter(Context context, int textViewResourceId,
			List<String> objects, SwipeListView mSwipeListView) {
		super(context, textViewResourceId, objects);
		this.objects = objects;
		this.mSwipeListView = mSwipeListView;
		mInflater = (LayoutInflater) context
				.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
	}

	@Override
	public View getView(final int position, View convertView, ViewGroup parent) {
		final ViewHolder holder;
		if (convertView == null) {
			convertView = mInflater
					.inflate(R.layout.package_row, parent, false);
			holder = new ViewHolder();
			holder.key = (TextView) convertView.findViewById(R.id.tv_key);
			holder.bt_delete = (Button) convertView
					.findViewById(R.id.bt_delete);
			holder.cb_delete = (CheckBox) convertView
					.findViewById(R.id.cb_delete);
			convertView.setTag(holder);
	
		} else {
			holder = (ViewHolder) convertView.getTag();
		}
		
		holder.cb_delete
				.setOnCheckedChangeListener(new OnCheckedChangeListener() {

					@Override
					public void onCheckedChanged(CompoundButton buttonView,
							boolean isChecked) {
						if (isChecked) {
							holder.bt_delete.setVisibility(View.VISIBLE);
							
						} else {
							holder.bt_delete.setVisibility(View.INVISIBLE);
						}
					}
				});
		holder.bt_delete.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				AlertDialog.Builder builder = new AlertDialog.Builder(
						getContext());
				builder.setTitle("Whether or not to delete?");
				builder.setIcon(R.drawable.ic_launcher);
				builder.setPositiveButton("Yes",
						new DialogInterface.OnClickListener() {

							@Override
							public void onClick(DialogInterface arg0, int arg1) {
								mSwipeListView.closeAnimate(position);
								mSwipeListView.dismiss(position);
									System.out.println("取到的id:"+lista.get(position).getId());
									DataSupport.delete(News.class, lista.get(position).getId());
					
								dialog.dismiss();
							}
						});
				builder.setNegativeButton("No",
						new DialogInterface.OnClickListener() {

							@Override
							public void onClick(DialogInterface arg0, int arg1) {
								dialog.dismiss();
							}
						});
				builder.create();
				dialog = builder.show();
			}
		});
		
		
			String item = getItem(position);
			holder.key.setText(item);
			
			
		
		
		return convertView;
	}
	
	class ViewHolder {
		TextView key;
		Button bt_delete;
		CheckBox cb_delete;
	}
其中layout文件代码是:

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

    <RelativeLayout
        android:id="@+id/back"
        android:layout_width="match_parent"
        android:layout_height="80dp"
        android:tag="back"
    android:background="#FFBB33"
         >

        <CheckBox
            android:id="@+id/cb_delete"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_centerVertical="true"
            android:layout_marginLeft="5dp" />

        <Button
            android:id="@+id/bt_delete"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="5dp"
             android:layout_centerVertical="true"
            android:layout_toRightOf="@id/cb_delete"
            android:text="delete"
            android:visibility="invisible" />
    </RelativeLayout>

    <RelativeLayout
        android:id="@+id/front"
        android:orientation="vertical"
        android:background="#FF8800"
        android:layout_width="match_parent"
        android:layout_height="80dp" >

       <!-- 电影代号 -->

        <TextView
            android:id="@+id/tv_key"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:textColor="#ffffff"
            android:text="Ket"
            android:textSize="26dp" />
    </RelativeLayout>

</FrameLayout>

其中值得注意的是整个包裹在framelayout显示在listview上的放在下面。

剩下的两个方法的代码:

	private List<String> getTestData() {
		System.out.println("进来了");
		List<String> dome = new ArrayList<String>();
		lista.clear();
		lista.addAll(DataSupport.findAll(News.class));
		for (int i = 0; i < lista.size(); i++) {
			System.out.println("取到的key:" + lista.get(i).getKey());
			dome.add(lista.get(i).getKey());

		}

		return dome;

	}
以上是添加listview中的数据。

	/**
	 * 获取屏幕宽度
	 * 
	 * @return
	 */
	private int getDeviceWidth() {
		return getResources().getDisplayMetrics().widthPixels;
	}
	/**
	 * 条目样式
	 */
	  private void reload() {
          mSwipeListView.setSwipeMode(SwipeListView.SWIPE_MODE_LEFT);
          mSwipeListView.setSwipeActionLeft(SwipeListView.SWIPE_ACTION_REVEAL);
          mSwipeListView.setOffsetLeft(deviceWidth * 1 / 3);
          mSwipeListView.setAnimationTime(0);
          mSwipeListView.setSwipeOpenOnLongPress(false);
}
这个是配置swiperlistview每一行的样式,我这是向左移动到1/3的位置

最后swipelistview每行的点击事件:

mSwipeListView.setSwipeListViewListener(new TestBaseSwipeListViewListener());
class TestBaseSwipeListViewListener extends BaseSwipeListViewListener {

		@Override
		public void onClickFrontView(int position) {
			super.onClickFrontView(position);
			
		}

		@Override
		public void onDismiss(int[] reverseSortedPositions) {
			
	}
第一个方法是swipelistView的每行点击方法。

第二个方法是删除行的方法





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值