【问题标题】:Listview effect click child of itemListview 效果单击项目的子项
【发布时间】:2016-09-22 18:39:56
【问题描述】:

我有一个列表视图,并且有这个项目样式

当我点击它的任何部分时,它全部被选中

但我想获得 DescriptionAction 1Action 2

的单独效果

这种风格:

我的 XML 项目

...
<LinearLayout android:layout_width="match_parent" 
              android:layout_height="wrap_content"
              android:orientation="vertical"
              android:id="@+id/linearLayout"
              android:layout_marginLeft="3dp">

        <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:textSize="20sp"
                android:id="@+id/txtDescription"
                android:text="description" />

        <!--this is one separator horizontal -->
        <View
                android:layout_width="match_parent"
                android:layout_height="1dp"
                android:background="@android:color/darker_gray"/>

        <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="50dp"
                android:weightSum="100"
                android:orientation="horizontal">

            <LinearLayout android:layout_width="wrap_content"
                          android:layout_weight="50"
                          android:id="@+id/test1"
                          android:layout_height="match_parent">

                <TextView
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:gravity="center"
                        android:id="@+id/txtAction1"
                        android:text="Action 1" />

            </LinearLayout>

            <!--this is one separator vertical-->
            <View
                    android:layout_width="1dp"
                    android:layout_height="match_parent"
                    android:background="@android:color/darker_gray" />


            <LinearLayout android:layout_width="wrap_content"
                          android:id="@+id/test2"
                          android:layout_height="match_parent">

                <TextView
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:layout_weight="50"
                        android:gravity="center"
                        android:id="@+id/txtAction2"
                        android:text="Action 2" />

            </LinearLayout>
        </LinearLayout>
</LinearLayout>
...

我的 Java 类

//ViewHolder
static class ViewHolderItem {
    public LinearLayout test1;
    public LinearLayout test2;
}


//Adapter
class RoteiroAdapter extends BaseAdapter{

    private Context mContext = null;
    private List<ItemRoteiro> mListaRoteiro = null;

    public RoteiroAdapter(Context context, List<ItemRoteiro> lista){
        this.mContext = context;
        this.mListaRoteiro = lista;
    }

    ...

    ...

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        ViewHolderItem viewHolder;

        if(convertView == null){

            LayoutInflater inflater = ((Activity) mContext).getLayoutInflater();
            convertView = inflater.inflate(R.layout.item_roteiro, parent, false);

            viewHolder = new ViewHolderItem();
            viewHolder.test1= (LinearLayout) convertView.findViewById(R.id.txtTest1);
            viewHolder.test2= (LinearLayout) convertView.findViewById(R.id.txtTest2);
            convertView.setTag(viewHolder);
        }
        else{
            viewHolder = (ViewHolderItem) convertView.getTag();
        }

        ItemRoteiro item = mListaRoteiro.get(position);

        if(item != null) {

            viewHolder.test1.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                }
            });

            viewHolder.test2.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                }
            });
        }

        return convertView;
    }
}

如何解决这个问题?谢谢!!

【问题讨论】:

  • 我尝试过使用android:clickable = "false",但是没有成功,我想我用错了方法。
  • 也许这里有解决方案,但我想不出任何办法。这个布局是否有任何理由需要在 ListView 而不是 ScrollView 中?如果它在 ScrollView 中,我认为这将成为一个更容易解决的问题。
  • 谢谢@joebro,我看了这个link,但它对我不起作用。我考虑使用列表视图,因为信息将被加载到数据库中,它不会是“固定”的数量
  • 我不太了解这里的细节,但通过动态创建布局并将它们以编程方式添加到 ScrollView 似乎可行。一些非常基本的伪代码,但类似这样:RelativeLayout relativeLayout = new RelativeLayout(this); //add action1/2 buttons and description here RelativeLayout scrollViewContainer = findViewById(R.id.scrollViewContainer); //get reference to the direct and only child of the scrollview //append layout with buttons and description to scrollViewContainer
  • 谢谢@joebro 我会做这个测试。

标签: android android-layout listview


【解决方案1】:

尝试将此添加到您的适配器项目布局中。

android:descendantFocusability="blocksDescendants"

更新

由于我没有注意到 onClickListener 位于布局而不是 TextView,因此您可以将点击侦听器添加到 TextViews 或将此属性应用于 LinearLayouts

android:clickable="true" 

这也适用于布局中的所有 TextView:

android:clickable="false"

【讨论】:

  • 感谢@GaryBak 的回答..但它不起作用:(
  • 您是否在列表视图上定义了 onItemClickListener?如果是这样,请将其删除。
  • LinearLayout中有OnClickListener,去掉了,还是不行:(
  • 谢谢@GaryBak,我尝试添加android: clickable 我让= true 仅在侦听器布局中...如果我按下“动作1”或“动作2”如果我删除没有任何反应侦听器 test1 和 test2 回填每个项目..
  • 非常感谢!!它奏效了,添加LinearLayout android:background="?android:attr/selectableItemBackground" 就足够了……,用这个丢了将近一天.....Thankssssss!!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-25
相关资源
最近更新 更多