1

我试图让一个按钮在 ListView Row 中工作。我一直在阅读有关自定义适配器的信息,但无法使其正常工作。基本上,我有一个 List_item 类,它有 4 个 TextView 和 1 个按钮,可以在另一个类中找到 ListView。其中一个 textViews 具有 id/Name。所以我想要的是当我按下该行上的按钮时。它将获得 TextView“名称”的值并将其添加到 ArrayList 中,如果我按下不同行上的另一个按钮,它会将“名称”的值添加到同一个数组列表中。所以基本上会将我在按钮上按下的所有按钮添加到 ArrayList 中。那可能吗??。

只是添加。我的数据库正在输入 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);

但是现在在我添加按钮后它没有得到任何值所以我重新搜索,我发现我必须将我的 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);
    }
});
4

1 回答 1

0

您将需要为您的ListView. 由于您是从数据库中获取数据,我建议您扩展CursorAdapter和覆盖newView()and bindView()。根据我的经验,如何正确执行此操作的文档很少,因此我将尝试在这里给出一些指示。

newView()中,您需要使用LayoutInflator通过调用getLayoutInflator()您的ListActivity. 在你调用inflate()这个之后LayoutInflator,你可以获取该特定行的 Button 并设置它的OnClickListener.

bindView()中,您几乎可以做所有相同的事情,除了您不需要扩充新视图,因为 Android 要求您重用现有View对象。您可能想要创建一些额外的方法以减少重复代码的数量。

我希望这会有所帮助,即使它是用英语而不是代码示例来解释的。

于 2013-02-17T00:54:03.657 回答