android listview长按,单击各种事件捕捉

之前一直想总结一下这样知识,后面各种忙,就不想写。还是自已总结一下比较好。listview需要注意事项有很多吧,也是最常用的控件之一。我们可以自动计算listview的高度,当与滚动条一起使用的时候。listview分隔线也可以去掉,,或者更改。还有与各种控件一起使用的监听。接下来看看我所介绍的以及效果图。

本文项目demo地址:点击此处下载

一、看项目主要类

package com.example.customlistviewdemo;import java.util.ArrayList;import java.util.List;import android.os.Bundle;import android.app.Activity;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.view.View.OnClickListener;import android.widget.AdapterView;import android.widget.AdapterView.OnItemLongClickListener;import android.widget.BaseAdapter;import android.widget.Button;import android.widget.CheckBox;import android.widget.CompoundButton;import android.widget.LinearLayout;import android.widget.ListAdapter;import android.widget.ListView;import android.widget.TextView;import android.widget.CompoundButton.OnCheckedChangeListener;import android.widget.Toast;public class CustomListviewActivity extends Activity implementsOnClickListener, OnItemLongClickListener {private ListView myListView;private MyCustomListViewAdapter mCustomListViewAdapter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_custom_listview);myListView = (ListView) findViewById(R.id.listView1);mCustomListViewAdapter = new MyCustomListViewAdapter(getApplicationContext());myListView.setOnItemLongClickListener(this); // 长按item监听myListView.setAdapter(mCustomListViewAdapter);setListViewHeightBasedOnChildren(myListView); // listview自动计算高度Button button = (Button) findViewById(R.id.button1);button.setOnClickListener(this);}// listview自动计算高度private void setListViewHeightBasedOnChildren(ListView listView) {// 获取ListView对应的AdapterListAdapter listAdapter = listView.getAdapter();if (listAdapter == null) {return;}int totalHeight = 0;for (int i = 0, len = listAdapter.getCount(); i < len; i++) {View listItem = listAdapter.getView(i, null, listView);listItem.measure(0, 0); // 计算子项View 的宽高totalHeight += listItem.getMeasuredHeight(); // 统计所有子项的总高度}ViewGroup.LayoutParams params = listView.getLayoutParams();params.height = totalHeight+ (listView.getDividerHeight() * (listAdapter.getCount() – 1));listView.setLayoutParams(params);}public List<String> getDataSource() {ArrayList<String> list = new ArrayList<String>();list.add("北京");list.add("上海");list.add("广州");list.add("南京");list.add("苏州");list.add("江苏");list.add("杭州");list.add("乌镇");list.add("丽江");list.add("大理");list.add("昆明");list.add("哈尔滨");return list;}public class MyCustomListViewAdapter extends BaseAdapter implementsOnCheckedChangeListener, OnClickListener {private Context mContext;private LayoutInflater mLayoutInflater;public MyCustomListViewAdapter(Context context) {mContext = context;mLayoutInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);}@Overridepublic int getCount() {return getDataSource().size();}@Overridepublic Object getItem(int position) {return position;}@Overridepublic long getItemId(int arg0) {return 0;}@Overridepublic View getView(int position, View arg1, ViewGroup arg2) {LinearLayout linearLayout = (LinearLayout) mLayoutInflater.inflate(R.layout.layout_custom_checkbox_item, null);linearLayout.setOnClickListener(this);linearLayout.setTag(position);TextView titleTextView = (TextView) linearLayout.findViewById(R.id.textView1);if (titleTextView != null)titleTextView.setText(getDataSource().get(position));// 控件 是否选中CheckBox selectedCheckBox = (CheckBox) linearLayout.findViewById(R.id.checkBox1);selectedCheckBox.setOnCheckedChangeListener(this);return linearLayout;}@Overridepublic void onCheckedChanged(CompoundButton arg0, boolean arg1) {Integer nPosition = (Integer) (arg0.getTag());Toast.makeText(getApplication(), "CheckBox选中事件:",Toast.LENGTH_SHORT).show();}@Overridepublic void onClick(View arg0) {// 单击事件响应int position = ((Integer) arg0.getTag()).intValue();Toast.makeText(getApplication(),"listview单击事件:" + getDataSource().get(position),Toast.LENGTH_SHORT).show();}}@Overridepublic boolean onItemLongClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) {Toast.makeText(getApplicationContext(), "listview长按事件:",Toast.LENGTH_SHORT).show();return true;}@Overridepublic void onClick(View arg0) {if (arg0.getId() == R.id.button1) {Toast.makeText(getApplicationContext(), "button事件:",Toast.LENGTH_SHORT).show();}}}大家都知道,listview是可以自已滚动的,但也可以禁止滚动。可能你不需要它滚动。只需要滚动条滚动。我就是遇到过这种需求,listview与滚动条一起使用情况。代码上也有所说明了。

二、下面看看xml

蚁穴虽小,溃之千里。

android listview长按,单击各种事件捕捉

相关文章:

你感兴趣的文章:

标签云: