2013-02-16 64 views
1

我想要一個按鈕在ListView行中工作。我一直在閱讀關於自定義適配器,但不能得到它的工作。基本上我有一個List_item類有4個TextView和1個按鈕,在另一個類中添加了一個ListView。其中一個textViews有id/Name。所以我想要的是當我按下該行上的按鈕。它將得到該TextView的「名稱」的值並將其添加到一個ArrayList,如果我按另一行上的另一個按鈕,它會將「名稱」的值添加到同一個數組列表中。所以基本上會將我按下按鈕的所有元素添加到ArrayList中。那可能嗎??。在ListView中的每一行的自定義佈局

只需添加。 textView正在被我的數據庫喂入..感謝任何回覆。

List_item.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/RelativeLayout1" 
android:layout_width="fill_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" 
android:paddingBottom="10dp" > 

<TableRow 
    android:id="@+id/tableRow1" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:baselineAligned="false" > 

    <TextView 
     android:id="@+id/id" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:textColor="#FFFFFF" 
     android:visibility="gone" /> 

    <TextView 
     android:id="@+id/name" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_gravity="left" 
     android:layout_weight="3" 
     android:textAllCaps="true" 
     android:textColor="#FFFFFF" 
     android:textSize="30sp" 
     android:textStyle="bold" 
     android:typeface="serif" /> 

    <TextView 
     android:id="@+id/price" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_gravity="center" 
     android:layout_weight="1" 
     android:gravity="right" 
     android:paddingRight="15dp" 
     android:textAllCaps="true" 
     android:textColor="#FFFFFF" 
     android:textSize="30sp" 
     android:textStyle="bold" 
     android:typeface="serif" /> 

    <Button 
     android:id="@+id/order" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="right" 
     android:layout_weight="0" 
     android:focusable="false" 
     android:minHeight="0dp" 
     android:minWidth="50dp" 
     android:text="+" 
     android:textStyle="bold" /> 

</TableRow> 

<TableRow 
    android:id="@+id/tableRow2" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:layout_below="@+id/tableRow1" 
    android:gravity="center_horizontal" > 

    <TextView 
     android:id="@+id/description" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:textAllCaps="true" 
     android:textColor="#FFFFFF" 
     android:textSize="20sp" 
     android:textStyle="bold" 
     android:typeface="serif" 
     android:visibility="gone" /> 

</TableRow> 

</RelativeLayout> 

我menu.xml文件有

<ListView 
    android:id="@android:id/list" 
    android:layout_width="fill_parent" 
    android:layout_height="697dp" > 
</ListView> 

現在我想的TextView的 「名稱」 值當我按下它的行按鈕。

這就是我用來填補我的ListView之前,我添加按鈕,它工作正常

ListAdapter adapter = new SimpleAdapter (getCategoryItems.this,itemsList,R.layout.list_item, new String[]{ TAG_ID, TAG_NAME,TAG_PRICE, TAG_DESCRIPTION},new int[] { R.id.id, R.id.name, R.id.price, R.id.description}); 
setListAdapter(adapter); 

但現在在我添加的按鈕,它沒有得到任何價值,所以我reaserched,我發現我必須將我的SampleAdapter更改爲自定義適配器。並在getView()中添加按鈕,但我無法得到它的掛起。

我的按鈕OnClickListener

Button order = (Button) view.findViewById(R.id.order); 
order.setOnClickListener(new Button.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     String name = ((TextView)view.findViewById(R.id.name)).getText().toString(); 
     Log.d("Selected : ", name); 
    } 
}); 
+2

請發佈最少量的代碼來說明你在做什麼。 – 2013-02-16 23:10:36

+0

我添加了在執行postexceute()中的listAdapter之前應該發生的背景方法。 – 2013-02-16 23:28:54

+1

由於你的問題與JSON無關,我建議你用一些硬編碼數據編寫一個更簡單的例子。 – 2013-02-16 23:31:53

回答

0

您需要創建一個自定義適配器類的ListView。由於您從數據庫獲取數據,因此建議您擴展CursorAdapter並覆蓋newView()bindView()。根據我的經驗,如何正確地做到這一點的文檔記錄很差,所以我會嘗試在這裏給出一些指示。

newView()中,您需要使用LayoutInflator,它是通過在您的ListActivity上致電getLayoutInflator()提供給您的。在LayoutInflator上調用inflate()後,您可以獲取該特定行的Button並設置它的OnClickListener

bindView()中,除了您不需要膨脹新視圖之外,您可以完成所有相同的操作,因爲Android要求您重新使用現有的View對象。您可能想要創建一些額外的方法以減少重複代碼的數量。

我希望這可以幫助,即使它是用英文解釋而不是代碼示例。

+0

非常感謝。我將通過您提供給我的信息努力工作。 – 2013-02-17 01:03:03

+0

@MoAdel您可能會考慮擴展'SimpleCursorAdapter'而不僅僅是'CursorAdapter'。您可能可以利用它爲您填充「TextView」,因此您不必手動執行。 – 2013-02-17 01:15:20