我试图让一个按钮在ListView行中工作。我一直在阅读有关自定义适配器但无法使用它。基本上我有一个List_item类,它有4个TextView和1个按钮,可以在另一个类中查看ListView。其中一个textViews有id / Name。所以我想要的是当我按下该行上的按钮时。它将获得TextView的价值" name"并将其添加到ArrayList中,如果我按下另一行上的另一个按钮,它将添加" name"的值。同一个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的值和#34;名字&#34;当我按下行上的按钮时。
这是我在添加按钮之前用来填充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);
}
});
答案 0 :(得分:0)
您需要为ListView
创建自定义适配器类。由于您是从数据库获取数据,因此我建议您延长CursorAdapter
并覆盖newView()
和bindView()
。根据我的经验,如何正确地执行此操作的文档记录很少,因此我将尝试在此处提供一些指示。
在newView()
中,您需要使用LayoutInflator
上的getLayoutInflator()
来ListActivity
。在此inflate()
上致电LayoutInflator
后,您可以获取该特定行的按钮并设置其OnClickListener
。
在bindView()
中,除了因为Android要求您重复使用现有的View
对象而无需夸大新视图外,您还可以执行所有相同操作。您可能希望创建一些额外的方法,以减少重复代码的数量。
我希望这有帮助,即使用英语解释而不是用代码示例解释。