android listview長按,單擊各種事件捕捉
之前一直想總結一下這樣知識,後面各種忙,就不想寫。還是自已總結一下比較好。listview需要注意事項有很多吧,也是最常用的控制項之一。我們可以自動計算listview的高度,當與捲軸一起使用的時候。listview分隔線也可以去掉,或者更改。還有與各種控制項一起使用的監聽。接下來看看我所介紹的以及。
一、看項目主要類
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 getDataSource() {ArrayList list = new ArrayList();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
這裡的xml還用到浮動的FrameLayout,用來顯示button鍵。
三、下面來看看listview的item的xml
這裡說明一下,LinearLayout裡需要這兩句。分別是listview單擊和長按的設定。
android:longClickable=true android:clickable=true
四、接下來看看:
五、最後補充一下,去掉listview分隔線或者設定。
去掉分隔線有三種方法:
1、myListView.setDividerHeight(0);
2、myListView.setDivider(null);
- 3、XML布局檔案中設定ListView的屬性android:divider=#FFCC00或者android:divider=@null
設定或者換一個好看的自動的分隔線也行
android:divider=@drawable/skin_line
到這裡就結束了,本文中講的都是監聽以及布局,關於listview以及捲軸,checkbox,buuton一起使用。