android listview長按,單擊各種事件捕捉

來源:互聯網
上載者:User

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);

 

  1. 3、XML布局檔案中設定ListView的屬性android:divider=#FFCC00或者android:divider=@null

    設定或者換一個好看的自動的分隔線也行

    android:divider=@drawable/skin_line


    到這裡就結束了,本文中講的都是監聽以及布局,關於listview以及捲軸,checkbox,buuton一起使用。

     

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.