Android -List包含按钮和textview的视图不再可选

时间:2012-03-01 09:12:17

标签: android listview button selectable focusable

我在本网站上发过很多关于listview的帖子,但是无法选择按钮和文本视图。但我的问题不同,我无法从其他相关帖子中得出结论。 我有一个由BaseAdapter填充的listview。列表视图的布局是左侧的2个文本视图,右侧是每行的按钮。我希望能够选择按钮以及列表视图的整行。

我知道按钮在使用时正在获得关注。有人能告诉我如何制作按钮以及整行 - 可选?

此致 阿吉特

3 个答案:

答案 0 :(得分:0)

是的,您可以通过在布局中将焦点设置为false按钮来执行此操作,执行此操作即可解决您的问题

只有当List没有任何可聚焦的元素时,它才会单击。因此,如果要单击列表和按钮,则将按钮的焦点设置为false。通过此,您可以单击按钮和整个列表

答案 1 :(得分:0)

将android:onClick属性添加到布局XML中的按钮。

<强>机器人:的onClick

单击视图时要调用的此View上下文中的方法的名称。此名称必须对应于只接受View类型的一个参数的公共方法。例如,如果指定android:onClick =“sayHello”,则必须声明上下文的公共void sayHello(View v)方法(通常是您的Activity)。

答案 2 :(得分:0)

我也面临同样的问题,下面是关于如何在Android API 16级解决它的示例代码。最重要的是拥有 android:clickable android:focusable < / strong>设置为true。

在您的行XML文件中:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/row_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@android:drawable/list_selector_background"
    android:clickable="true"
    android:focusable="true"
    android:gravity="center_vertical"
    android:orientation="horizontal"
    android:padding="5dp" >

    <TextView
        android:id="@+id/label"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1" />

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/button" />

</LinearLayout>

在基础适配器中,您可以将侦听器设置为执行某些操作:

public class MyBaseAdapter extends BaseAdapter {

    // Some other method implementation here...

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // Initialize the convertView here...

        LinearLayout layout = (LinearLayout) convertView.findViewById(R.id.row_layout);
        Button button = (Button) convertView.findViewById(R.id.button);

        layout.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                Toast.makeText(context, "Row clicked!", Toast.LENGTH_LONG).show();
            }
        });
        button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                Toast.makeText(context, "Button clicked!", Toast.LENGTH_LONG).show();
            }
        });
    }

}