android库SwipeListView的使用

本文详细介绍了一个开源项目SwipeListView的使用方法。包括导入所需库、配置Demo、实现代码等步骤,并展示了如何通过设置监听器实现滑动操作及响应。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  今天介绍一个开源项目SwipeListView的使用。

  源码下载:https://github.com/47deg/android-swipelistview

  解压之后有一个库和demo。

 1、导入swipeListView库,报错需要nineoldandroids.jar和android-support-v4.jar库。android-support-v4.jar直接在Android SDK里的.\extras\android\support文件夹里找到。nineoldandroids.jar库需要到https://github.com/JakeWharton/NineOldAndroids/里下载。

 2、导入demo,添加swipeListView库。

 3、代码:

public class SwipeListViewExampleActivity extends FragmentActivity {

	private static final int REQUEST_CODE_SETTINGS = 0;
	private PackageAdapter adapter;
	private List<PackageItem> data;

	private SwipeListView swipeListView;

	private ProgressDialog progressDialog;
	private PullToRefreshScrollView scrollView;

	@TargetApi(Build.VERSION_CODES.HONEYCOMB)
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		setContentView(R.layout.swipe_list_view_activity);

		data = new ArrayList<PackageItem>();

		adapter = new PackageAdapter(this, data);
		scrollView = (PullToRefreshScrollView) findViewById(R.id.scrollview);
		scrollView.setOnRefreshListener(new OnRefreshListener<ScrollView>() {

			@Override
			public void onRefresh(PullToRefreshBase<ScrollView> refreshView) {
				new GetData().execute();
			}
		});

		scrollView
				.setOnPullEventListener(new OnPullEventListener<ScrollView>() {

					@Override
					public void onPullEvent(
							PullToRefreshBase<ScrollView> refreshView,
							State state, Mode direction) {
						swipeListView.closeOpenedItems();
					}
				});

		swipeListView = (SwipeListView) findViewById(R.id.example_lv_list);

		if (Build.VERSION.SDK_INT >= 11) {
			swipeListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
		}
		if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
			swipeListView
					.setMultiChoiceModeListener(new AbsListView.MultiChoiceModeListener() {

						@Override
						public void onItemCheckedStateChanged(ActionMode mode,
								int position, long id, boolean checked) {
							mode.setTitle("Selected ("
									+ swipeListView.getCountSelected() + ")");
						}

						@Override
						public boolean onActionItemClicked(ActionMode mode,
								MenuItem item) {
							int id = item.getItemId();
							if (id == R.id.menu_delete) {
								swipeListView.dismissSelected();
								return true;
							}
							return false;
						}

						@Override
						public boolean onCreateActionMode(ActionMode mode,
								Menu menu) {
							MenuInflater inflater = mode.getMenuInflater();
							inflater.inflate(R.menu.menu_choice_items, menu);
							return true;
						}

						@Override
						public void onDestroyActionMode(ActionMode mode) {
							swipeListView.unselectedChoiceStates();
						}

						@Override
						public boolean onPrepareActionMode(ActionMode mode,
								Menu menu) {
							return false;
						}
					});
		}

		swipeListView.setSwipeListViewListener(new BaseSwipeListViewListener() {
			@Override
			public void onOpened(int position, boolean toRight) {
			}

			@Override
			public void onClosed(int position, boolean fromRight) {
			}

			@Override
			public void onListChanged() {
			}

			@Override
			public void onMove(int position, float x) {
			}

			@Override
			public void onStartOpen(int position, int action, boolean right) {
				Log.d("swipe", String.format("onStartOpen %d - action %d",
						position, action));
			}

			@Override
			public void onStartClose(int position, boolean right) {
				Log.d("swipe", String.format("onStartClose %d", position));
			}

			@Override
			public void onClickFrontView(int position) {
				Log.d("swipe", String.format("onClickFrontView %d", position));
			}

			@Override
			public void onClickBackView(int position) {
				Log.d("swipe", String.format("onClickBackView %d", position));
			}

			@Override
			public void onDismiss(int[] reverseSortedPositions) {
				for (int position : reverseSortedPositions) {
					data.remove(position);
				}
				adapter.notifyDataSetChanged();
				Function.setListViewHeightBasedOnChildren(swipeListView);
			}

		});

		swipeListView.setAdapter(adapter);

		reload();

		new ListAppTask().execute();

		progressDialog = new ProgressDialog(this);
		progressDialog.setMessage(getString(R.string.loading));
		progressDialog.setCancelable(false);
		progressDialog.show();

	}

	private void reload() {
		SettingsManager settings = SettingsManager.getInstance();
		swipeListView.setSwipeMode(settings.getSwipeMode());
		swipeListView.setSwipeActionLeft(settings.getSwipeActionLeft());
		swipeListView.setSwipeActionRight(settings.getSwipeActionRight());
		swipeListView.setOffsetLeft(convertDpToPixel(settings
				.getSwipeOffsetLeft()));
		swipeListView.setOffsetRight(convertDpToPixel(settings
				.getSwipeOffsetRight()));
		swipeListView.setAnimationTime(100);
		swipeListView
				.setSwipeOpenOnLongPress(settings.isSwipeOpenOnLongPress());
	}

	public int convertDpToPixel(float dp) {
		DisplayMetrics metrics = getResources().getDisplayMetrics();
		float px = dp * (metrics.densityDpi / 160f);
		return (int) px;
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		MenuInflater inflater = getMenuInflater();
		inflater.inflate(R.menu.menu_app, menu);
		return true;
	}

	@Override
	public boolean onMenuItemSelected(int featureId, MenuItem item) {
		final int id = item.getItemId();
		if (id == android.R.id.home) {
			finish();
		} else if (id == R.id.menu_settings) {
			Intent intent = new Intent(this, SettingsActivity.class);
			startActivityForResult(intent, REQUEST_CODE_SETTINGS);
		}
		return true;
	}

	@Override
	public void onActivityResult(int requestCode, int resultCode, Intent data) {
		super.onActivityResult(requestCode, resultCode, data);
		switch (requestCode) {
		case REQUEST_CODE_SETTINGS:
			reload();
		}
	}

	public class ListAppTask extends AsyncTask<Void, Void, List<PackageItem>> {

		protected List<PackageItem> doInBackground(Void... args) {
			PackageManager appInfo = getPackageManager();
			List<ApplicationInfo> listInfo = appInfo
					.getInstalledApplications(0);
			Collections.sort(listInfo,
					new ApplicationInfo.DisplayNameComparator(appInfo));

			List<PackageItem> data = new ArrayList<PackageItem>();

			for (int index = 0; index < listInfo.size(); index++) {
				try {
					ApplicationInfo content = listInfo.get(index);
					if ((content.flags != ApplicationInfo.FLAG_SYSTEM)
							&& content.enabled) {
						if (content.icon != 0) {
							PackageItem item = new PackageItem();
							item.setName(getPackageManager()
									.getApplicationLabel(content).toString());
							item.setPackageName(content.packageName);
							item.setIcon(getPackageManager().getDrawable(
									content.packageName, content.icon, content));
							data.add(item);
						}
					}
				} catch (Exception e) {

				}
			}

			return data;
		}

		protected void onPostExecute(List<PackageItem> result) {
			data.clear();
			data.addAll(result);
			adapter.notifyDataSetChanged();
			Function.setListViewHeightBasedOnChildren(swipeListView);
			if (progressDialog != null) {
				progressDialog.dismiss();
				progressDialog = null;
			}
			if (PreferencesManager.getInstance(
					SwipeListViewExampleActivity.this).getShowAbout()) {
				AboutDialog logOutDialog = new AboutDialog();
				logOutDialog.show(getSupportFragmentManager(), "dialog");
			}
		}
	}

	class GetData extends AsyncTask<Void, Void, Void> {

		@Override
		protected Void doInBackground(Void... params) {
			try {
				Thread.sleep(2000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			return null;
		}

		@Override
		protected void onPostExecute(Void result) {
			scrollView.onRefreshComplete();
			super.onPostExecute(result);
		}

	}

}
注意:adapter通知更新数据之后再设置,swipeListView的模式。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值