Android Listview中Button按鈕點選事件衝突解決辦法
今天做專案時,ListView中含有了Button元件,心裡一早就知道肯定會有衝突,因為以前就遇到過,並解決過,可惜當時沒有記錄下來。 今天在做的時候,繼續被這個問題鬱悶了一把,後來解決後,趕緊來記錄下,以便日後參考。
首先,其實Listview中Button按鈕點選事件衝突這種問題壓根就不是太大的問題,因為我們完全可以將一個TextView的Backgroud設定成一個selector,也可以將一個TextView設計成一個按鈕的樣子,這樣就可以繞過ListView和Button的衝突問題!
當然,如果非要使用Button,那可以利用以下方案解決。
首先,要了解的是,ListView和其它能觸發點選事件的widget無法一起正常工作的原因是加入其它widget後,ListView的itemclick事件被其它widget的click事件遮蔽,所以將無法觸發。
如何做呢?
定義list_item_btn.xml:
[html] view plain copy print?- <?xmlversion="1.0"encoding="utf-8"?>
- <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
-
android:orientation="horizontal"
- <ImageView
- android:id="@+id/avatar"
- android:layout_width="80dp"
- android:layout_height="80dp"
- android:src="@drawable/ic_launcher"/>
- <LinearLayout
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
-
android:orientation
- android:padding="10dp">
- <TextView
- android:id="@+id/title"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_margin="10dp"
- android:padding="6dp"
- android:text="玫瑰花園"
- android:textSize="16sp"/>
- <Button
- android:id="@+id/btn"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_margin="2dp"
- android:focusable="false"
- android:padding="6dp"
- android:text="玫瑰花園"
- android:textSize="16sp"/>
- </LinearLayout>
- </LinearLayout>
接下來,我們定義一個Bean,Plan.java:
[java] view plain copy print?- publicclass Plan {
- public String name;
- public String avatar;
- public Plan(String name, String avatar) {
- super();
- this.name = name;
- this.avatar = avatar;
- }
- @Override
- public String toString() {
- return"Plan [name=" + name + ", avatar=" + avatar + "]";
- }
- }
實現ListView的Adapter,MyAdapter.java: [java] view plain copy print?
- package com.wuyuan.listbtn;
- import java.util.List;
- import android.content.Context;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.ViewGroup;
- import android.view.View.OnClickListener;
- import android.widget.BaseAdapter;
- import android.widget.Button;
- import android.widget.ImageView;
- import android.widget.TextView;
- publicclass MyAdapter extends BaseAdapter {
- private Context mContext;
- private LayoutInflater mInflater;
- private List<Plan> mDatas;
- private OnClickListener onClickListener;
- public MyAdapter(Context context, List<Plan> datas,
- OnClickListener onClickListener) {
- mContext = context;
- mInflater = LayoutInflater.from(mContext);
- mDatas = datas;
- this.onClickListener = onClickListener;
- }
- @Override
- publicint getCount() {
- return (mDatas != null ? mDatas.size() : 0);
- }
- @Override
- public Object getItem(int position) {
- return (mDatas != null ? mDatas.get(position) : null);
- }
- @Override
- publiclong getItemId(int position) {
- return position;
- }
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- ViewHolder holder = null;
- if (convertView == null) {
- // 下拉項佈局
- convertView = mInflater.inflate(R.layout.list_item_btn, null);
- holder = new ViewHolder();
- holder.avatar = (ImageView) convertView.findViewById(R.id.avatar);
- holder.title = (TextView) convertView.findViewById(R.id.title);
- holder.btn = (Button) convertView.findViewById(R.id.btn);
- convertView.setTag(holder);
- } else {
- holder = (ViewHolder) convertView.getTag();
- }
- Plan plan = mDatas.get(position);
- if (plan != null) {
- holder.title.setText(plan.name);
- // 通常將position設定為tag,方便之後判斷點選的button是哪一個
- holder.btn.setTag(position);
- holder.btn.setOnClickListener(this.onClickListener);
- }
- return convertView;
- }
- staticclass ViewHolder {
- ImageView avatar;
- TextView title;
- Button btn;
- }
- }
注:
1. 構造方法中,我們傳入了OnClickListener,主要是為了讓每一個Item的Button監聽該事件.
2. holder.btn.setOnClickListener(this.onClickListener); 為Button設定點選事件監聽。
3. 為Button設定tag,tag的值為position,這樣可以方便獲取該Button所在的List中的位置。
最後,設定列表及事件監聽:
[java] view plain copy print?- publicclass MainActivity extends Activity {
- private ListView list_view;
- private List<Plan> plans;
- @Override
-
相關推薦
Android Listview中Button按鈕點選事件衝突解決辦法
今天做專案時,ListView中含有了Button元件,心裡一早就知道肯定會有衝突,因為以前就遇到過,並解決過,可惜當時沒有記錄下來。 今天在做的時候,繼續被這個問題鬱悶了一把,後來解決後,趕緊來記錄下,以便日後參考。 首先,其實Listview中Button按
TableView cell的選中事件 與手勢點選事件 衝突解決辦法
三步曲 1、遵守UIGestureRecognizerDelegate協議 2、給手勢觸發動作新增代理 程式碼如下 UITapGestureRecognizer *hideTap = [[UITapGestureRecognizer alloc]initWithTarge
Tap手勢與UITableView點選事件衝突解決辦法
在我們的開發過程中經常會遇到點選頁面回收鍵盤的需求,當然這個很好解決。 在我們的開發過程中也會遇到點選某一選項之後回收列表,這個也很容易實現。 那麼,問題來了,當這兩個碰到一起怎麼辦呢,你可以按照正常的程式碼去寫,但是,當你點選的時候你會發現,並沒有出現你預期要
Android小記:ListView中的按鈕點選響應事件
在Adapter中定義一個回撥介面,在Activity中實現該介面,從而實現對點選事件的響應。 有兩種方式都能比較好的實現:使用介面回撥和使用抽象類回撥 1.使用介面回撥: Adapter類: package com.ivan.adapter;
Android listview的item中button的點選事件 item和button 可同時點選
此種應用情形在android開發中會遇到很遇到很多 在此闡述一下我的解決方案 第一步 給一個listview xml 可根據自己需要自己佈局 第二步 給listview 一個adapter 我們需要在 adapter 中 定義一個點選響應介面 OnCl
asp.net中Button按鈕點選兩次才執行Onclick事件的原因
今天寫了一個簡單的聊天室,有登入頁面和聊天室,當從登入頁面跳入到聊天室過後,卻發現要點選兩次傳送按鈕才能傳送到顯示區,然後傳送按鈕正常執行。 通過不斷測試,發現,第一次點選並沒有執行點選事件,第二次才執行的點選事件。並且也找到了問題所在。下面用一個
openDialog()中確定按鈕點選事件
openDialog()中確定按鈕點選事件 本文是我在開發過程中,遇到的也是我不知道的知識,所以此篇僅當做自己以後借鑑用的,如果能對看官你也有用,榮幸之至。 form.ajaxSubmit 首先,在jeeplus中xxxform.jsp檔案中,一般openDialog()
在Android studio中設定按鈕點選變色效果的方法
一、在drawable下新建一個xml 名字"test" 程式碼如下: <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.androi
asp.net中的按鈕點選事件
ASP.NET中Onclick和OnserverClick事件的區別 對於伺服器按鈕控制元件(即<asp:Button>型別的按鈕): 伺服器響應事件:OnClick 客戶端響應屬性:OnClientClick 對於html按鈕控制元件(即<input ty
ListView中Item的點選事件與Item中控制元件的點選事件並存的方法
在ListView的item的xml配置檔案的根節點新增屬性: android:descendantFocusability="blocksDescendants" 並且在要新增事件的子控制元件(如button)的屬性裡新增 andro
黑馬66期android學習筆記16_按鈕點選事件
一、專案結構 二、activity_main.xml程式碼 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schema
SpannableString中的ClickableSpan和Textview點選事件衝突解決
背景描述:專案中有這樣的需求:在展示評論內容的Textview中展示文字,其中包含3種類型資料: 1、普通文字:評論內容或者回復內容。因為這個Textview是展示評論或者回復的,點選後,要展示軟鍵盤(popupwindow等忽略) 2、股票程式碼:該型別文
表單提交與按鈕點選事件衝突
問題出現的原因:在提交表單的時候經常會需要判斷表單內的內容是否合法,這時候就需要處理提交按鈕點選事件與表單action屬性的關係, 問題體現:無論表單內的內容是否合法,都會跳轉到action繫結的地址。 解決辦法: 一:用form表單的onsubmit方法添進行呼叫,不
在Angular輸入框內按下回車會觸發其它button的點選事件的解決方法
將不需要觸發事件的button上新增type="button"即可<button type="button" (click)="clickMe()">click</button>參考:https://stackoverflow.com/question
ionic開發——百度地圖InfoWindow資訊視窗上新增按鈕,無法觸發點選事件問題解決辦法
ionic開發中,在使用百度地圖的時候,有時我們需要在點選地圖上標註的海量點彈出一個infowindow的資訊視窗,自定義資訊視窗的內容後,我們想要可以在資訊視窗上面點選的時候,發現點選沒有效果。 我
swiper輪播圖包在div(tab切換)下js上一頁下一頁點選事件失效解決辦法
問題: 兩種解決辦法: 解決辦法一: var mySwiper = new Swiper ('.swiper-container', { nextButton: '.swiper-button-next', p
form表單中button按鈕返回上一頁解決辦法
解決Form中button按鈕不好用的問題解決辦法。 方法一: 1.在Form表單標籤中國增加一個屬性,如下圖,紅框處 2.返回按鈕樣式 3.onclick方法需要跳轉的頁面,遮擋處為需要返回的頁面 方法二: 1.把button按鈕的標籤換成input標籤,那麼Form標籤中就不用填寫act
GridView的點選事件衝突解決
在開發的時候,經常可能遇到ListView或GridView原因是Item佈局中的button或ImageButton強制獲取了item的焦點,解決方式之一是:只要設定Item佈局中的bu
Android:處理ListView條目中的Button的點選事件和條目點選事件衝突
一 . 此條方法比較笨. 給條目中的1號區域的Button設定完了點選事件後,再給條目中的2號區域再設定點選事件 二 . 這個方法就比較簡單. 1 . 在ItemView配置的xml檔案中的根節點新增屬性android:descendantFocus
Android中的ListView響應item內部按鈕點選事件
ListView可以說是我們在實際開發中最常用到的控制元件了。可以說每一個app都需要用到listview來顯示列表,如果我們需要點選listView的不同按鈕跳轉到不同頁面,具體邏輯在重寫的onItemClick()方法中實現,這裡不多說,不瞭解listVie