2013-09-25 163 views
3

我想在具有多個選項的ListView中創建一個項目;查看和編輯。我想在完全相同的方式作爲Android的接觸系統來創建它 - 見下:在列表視圖項中的多個可點擊的視圖

enter image description here

我已經加入了紅色方框來說明我想要的行爲。如果你在左邊的紅色框內按下,你可以給聯繫人打電話。如果您在右側的紅色框內按下,則會向聯繫人發送短信。我已經在XML中創建了類似的佈局,但在代碼中實現此功能時遇到了問題。

我試圖創建自定義android:onClick函數調用項目內的單獨佈局,但調用onClick方法只允許您傳遞視圖作爲參數,但不是位置。需要使用listview.getItemAtPosition函數的位置,我試圖使用listview.getPositionForView返回位置,但發現這是非常不穩定的,並且由於視圖回收很容易返回錯誤的位置。

然後我嘗試在我的適配器的getView方法中將項目的位置設置爲'標記',如下所示:convertView.setTag(position)。但在我的活動的onClick方法中,我嘗試並使用getTag並將其重新轉換爲整數,並且它總是返回null,這讓我感到困惑。

實現由每個項目上具有多個按鈕/佈局的項目填充的列表的最佳方式是什麼?

+0

看一看這裏: http://stackoverflow.com/questions/1709166/android-listview-elements-with-多個可點擊的按鈕 http://stackoverflow.com/questions/7763983/how-to-do-button-click-and-list-view-item-click-in-customize-list-view-in-androi – gskbyte

+1

此鏈接是強制性的http://cyrilmottier.com/2011/11/23/listview-tips-tricks-4-add-several-clickable-areas/ – gipi

回答

0

在定義getview方法的列表視圖中,這是您提供單個列表項的所有細節的地方。在那裏你可以提到每個視圖的onlick事件。

+0

但onClickListener不接受'int position'參數。我怎樣才能知道被按下的行的位置? –

+0

在佈局中定義listview並將arrayadapter分配給列表視圖。你將在arrayadapter中獲得位置。 arrayadapter的getView帶有位置號碼 – Amrut

1

你可以這樣你的行中創建每個觀點onClick事件:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="horizontal" > 

    <TextView 
     android:id="@+id/text_id" 
     android:layout_width="0sp" 
     android:layout_height="match_parent" 
     android:layout_weight="1" 
     android:gravity="center_vertical" 
     android:onClick="textOnClickEvent"/> 


    <ImageButton 
     android:id="@+id/button_id" 
     android:layout_width="@dimen/width_button" 
     android:layout_height="match_parent" 
     android:onClick="imageOnClickEvent" 
     android:src="@android:drawable/ic_menu_delete" /> 
</LinearLayout> 

甚至,就在getView方法中的每個觀點添加的onClick監聽器...在這個

更多信息here

適配器類
0

,添加View.OnClickListenergetView方法:

@Override 
public View getView(int i, View view, ViewGroup viewGroup) { 

    if(view == null) { 
     final LayoutInflater layoutInflater = LayoutInflater.from(mContext); 
     view = layoutInflater.inflate(R.layout.grid_vendor_item, null); 
    } 

    final TextView textName = (TextView) view.findViewById(R.id.text_id); 
    final ImageButton imageProfil = (TextView) view.findViewById(R.id.button_id); 

    textName.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      // add your edit codes 
     } 
    }); 

    imageProfil.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      // add your open prodil codes 
     } 
    });  
    return view; 
}