【问题标题】:Adding button to each row in listview将按钮添加到列表视图中的每一行
【发布时间】:2011-11-11 05:41:49
【问题描述】:

我想为列表视图的每一行添加按钮。我在布局文件夹中创建了一个名为 row.xml 的 XML 文件,并在该文件中添加了两个文本视图和一个按钮。但是当添加一个按钮时,我无法单击列表视图的项目。我只能点击按钮。这里是row.xml

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


    <TextView
        android:id="@+id/text11"

        android:layout_alignParentLeft="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
  android:textSize="25sp"
  android:textColor="#000000"
         />
          <TextView
        android:id="@+id/text2"

        android:layout_alignParentLeft="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
  android:textSize="10sp"
    android:textColor="#000000"
         />
          <Button android:text="Button" android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
</LinearLayout>

我想在我的活动中引用文本视图和按钮。请帮助我并提出一些想法。

【问题讨论】:

    标签: android listview


    【解决方案1】:

    我遇到了类似的问题。简单的技巧是将android:focusable="false" 添加到您的按钮。

    【讨论】:

    • 谢谢。我终于找到了适合我的解决方案!我的特定列表视图行中有两个按钮,一个在左侧,一个在右侧。这两个按钮有效,但是当我单击该行中的其他任何位置时,它没有调用 onItemSelected 回调。
    【解决方案2】:

    您可以使用自定义适配器(扩展数组适配器相当简单)。在getView 方法中,在TextView 上设置onClickListener,这样您的按钮和ListItem 的其他部分都会响应触摸。

    【讨论】:

      【解决方案3】:

      必须加上focusable="false"才可以

      <Button
              android:id="@+id/bt_do"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:gravity="center"
              **android:focusable="false"** />
      

      在您的适配器中

      public class MyAdapter extends BaseAdapter {
          private Context context;
          private List< Objet > objects;
          private OnClickListener listener;
      
          public MyAdapter(Context context, List<Objet> objects,
                  OnClickListener listener) {
              this.context = context;
              this.objects = objects;
              this.listener = listener;
              // TODO Auto-generated constructor stub
          }
      
          @Override
          public View getView(int position, View convertView, ViewGroup parent) {
              if (convertView == null) {
                  LayoutInflater infalInflater = ((Activity) context)
                          .getLayoutInflater();
                  convertView = infalInflater.inflate(R.layout.my_line_list, null);
              }
              Button bt_do=(Button)convertView.findViewById(R.id.bt_do);
              bt_do.setOnClickListener(listener);
              return convertView;
      
          }
      
          @Override
          public boolean hasStableIds() {
              return true;
          }
      
          @Override
          public int getCount() {
              // TODO Auto-generated method stub
              return objects.size();
          }
      
          @Override
          public Object getItem(int position) {
              // TODO Auto-generated method stub
              return objects.get(position);
          }
      
          @Override
          public long getItemId(int position) {
              // TODO Auto-generated method stub
              return position;
          }
      
      }
      

      并在您的活动中创建一个适配器并实现按钮侦听器。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-01-06
        • 1970-01-01
        • 2014-01-09
        • 2013-11-18
        • 1970-01-01
        • 2012-12-07
        • 2019-05-16
        相关资源
        最近更新 更多