滚动视图中的Listview不可单击

时间:2017-07-14 08:44:02

标签: android xamarin

我有2个观点。 1)MyMenuRestaurent.axml 2)ImageAndSubTitle.axml

MyMenuRestaurent.axml的代码

<LinearLayout>
 <ListView>
 </ListView>   
</LinearLayout>

图像和子标题代码

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@color/lightgray">
  <ScrollView
    xmlns:tools="http://schemas.android.com/tools"
          android:layout_width="fill_parent"
          android:layout_height="wrap_content">
    <TableLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:stretchColumns="1"
        android:backgroundTint="#ff81d4fa">
      <LinearLayout
          android:orientation="vertical"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:paddingLeft="10dip">
      </LinearLayout>

      <TextView
          android:id="@+id/Text1"
          android:text="Demo Item Name"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:textColor="@color/blue"
          android:textSize="20dip" />
      <TextView
          android:id="@+id/Text2"
          android:text="Demo Price"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:textSize="14dip"
          android:textColor="@color/blue" />
    </TableLayout>
  </ScrollView>    
</LinearLayout>

我有listview可点击。当点击一个项目时,单个项目的详细信息被打开。但如果我添加滚动视图(单击)不起作用。因为滚动视图块单击元素。我想点击项目和滚动视图。

3 个答案:

答案 0 :(得分:0)

尝试在android:descendantFocusability="blocksDescendants"中添加LinearLayout,它可能如下所示:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@color/lightgray"
    android:descendantFocusability="blocksDescendants">

希望它有所帮助。

答案 1 :(得分:0)

对于自定义列表视图,您必须具有适配器,并且您将为其传递自定义视图。因此,将onClickListener放在适配器中自定义视图的父布局上,它将模仿列表视图的onItemClickListener

这是listview的自定义视图

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:orientation="vertical"
          android:id="@+id/linearLayout"
          android:layout_width="match_parent"
          android:layout_height="120dp"
          >

<ImageView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/list_image"
    android:src="@drawable/homeopathy"
    android:scaleType="centerCrop"
    android:tint="#7b000000"
    />

<TextView
    android:layout_width="match_parent"
    android:layout_height="20dp"
    android:layout_marginTop="-67dp"
    android:gravity="center"
    android:textColor="#ffffff"
    android:textSize="15dp"
    android:text="This is a sample text"
    android:id="@+id/title"
    />

  </LinearLayout>

并在适配器中

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

        View vi = inflater.inflate(R.layout.list_row, null);

    TextView title = (TextView) vi.findViewById(R.id.title);

    ImageView thumb_image=(ImageView) vi.findViewById(R.id.list_image);
    list= data.get(position);

    // Setting all values in listview
    title.setText(list.getTitle());
    imageLoader.DisplayImage(list.getImage());

    LinearLayout linLayout = (LinearLayout) vi.findViewById(R.id.linearLayout);

    linLayout.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //Do what you want to do
        }
    });


    return vi;
}

答案 2 :(得分:0)

  

因为滚动视图块单击元素。我想点击项目和滚动视图。

您可以撰写自定义ListView并覆盖其OnInterceptTouchEvent方法,以便从ScrollView获取Touch事件。

  

实施此方法以拦截所有触摸屏动作事件。这允许您在将事件发送给您的孩子时观察事件,并在任何时候获得当前手势的所有权。

这样的代码:

public class InnerListview : ListView
{
  ...

    public override bool OnInterceptTouchEvent(MotionEvent ev)
    {
        switch (ev.Action)
        {
            case MotionEventActions.Down:
                setParentScrollAble(false);
                break;
            case MotionEventActions.Move:
                break;
            case MotionEventActions.Up:
            case MotionEventActions.Cancel:
                setParentScrollAble(true);
                break;
        }
        return base.OnInterceptTouchEvent(ev);
    }

    private void setParentScrollAble(bool flag)
    {
        Parent.RequestDisallowInterceptTouchEvent(!flag);
    }
}

ListView中使用此.axml,如下所示:

<ListViewInScrollView.InnerListview
     android:id="@+id/lv3"
     android:layout_width="match_parent"
     android:layout_height="300dp"
     android:background="#ffffff" />