使ListView不可点击,以便能够单击其父级的视图

时间:2015-11-18 06:54:01

标签: android listview android-listview listadapter

我已将ListView放在另一个视图的顶部,我希望列表只显示一些不断变化的数据,并且用户不应该与列表进行任何交互。 列表的父视图上有一些按钮,我需要通过列表进行访问。 我在这里尝试了许多提议的解决方案,但它们都不适合我。

您可以看到我尝试的各种解决方案(解决方案组合)的评论。

任何建议???

延长ListView

public class ItemList extends ListView {

    private MyListAdapater myListAdapater;
    private Item[] items;

    public ItemList(Context context, int rows) {
        super(context);
        items = new Item[rows];
        for (int i = 0; i < items.length; i++) {
            items[i] = new item(context, "Bla Bla Bla");
        }


        FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT, Gravity.CENTER);
        layoutParams.setMargins(pxToDp(8), 0, 0, pxToDp(12));
        setLayoutParams(layoutParams);
        myListAdapater = new MyListAdapater(context, items);
        setAdapter(myListAdapater);
        setDivider(null);
        int rowMargin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 8, getResources().getDisplayMetrics());
        setDividerHeight(pxToDp(8));
        setSelector(R.color.Transparent);
//        setOnTouchListener(new OnTouchListener() {
//            @Override
//            public boolean onTouch(View v, MotionEvent event) {
//                return false;
//            }
//        });
//        setFocusable(false);
//        setClickable(false);
//        setFocusableInTouchMode(false);
//        requestDisallowInterceptTouchEvent(true);
        setSelection(myListAdapater.getCount() - 1);
    }



    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        return false;
    }

    protected int pxToDp(int px) {
        return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, px, getResources().getDisplayMetrics());
    }

//    @Override
//    public boolean onTouchEvent(MotionEvent event) {
//        return true;
//    }

   }

列表适配器:

public class MyListAdapater extends BaseAdapter {

    private Item[] listData;
    private Context context;

    public MyListAdapater(Context context, Item[] listData) {
        this.Item = listData;
        this.context = context;

    }

    @Override
    public int getCount() {
        return listData.length;
    }

    @Override
    public Object getItem(int position) {
        return listData[position];
    }

    @Override
    public long getItemId(int position) {
        return position;
    }


    //    @Override
    //    public boolean isEnabled(int position) {
    //        return false;
    //    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        if (convertView == null) {
            holder = new ViewHolder();


            convertView = listData[position];
            holder.item = (Item) convertView;
            convertView.setTag(holder);
            //convertView.setOnTouchListener(new View.OnTouchListener() {
            //    @Override
            //    public boolean onTouch(View v, MotionEvent event) {
            //        return true;
            //    }
            //});

        } else {

            holder = (ViewHolder) convertView.getTag();
        }

        return convertView;
    }



    static class ViewHolder {
        Item item;
    }
}
  • 列表中的项目是视图本身

谢谢

修改

我尝试在xml中添加列表但仍然无法点击列表后面的视图。

我尝试了一个具有以下布局的测试项目:

?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/main_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.listtest.MainActivity"
    android:background="@color/Blue">


    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="click"
        android:layout_gravity="center"
        android:onClick="onClickTestButton"/>

    <ListView
        android:id="@+id/test_list"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginBottom="12dp"
        android:layout_marginLeft="8dp"
        android:divider="@drawable/divider"
        android:dividerHeight="8dp"
        android:listSelector="@color/Transparent"
        android:stackFromBottom="true"
        android:focusable="false"
        android:focusableInTouchMode="false"
        android:clickable="false" >
    </ListView>

</FrameLayout>

并在活动中:

myListAdapter = new MyListAdapater(this, items);
testList = (ListView) findViewById(R.id.test_list);
testList.setAdapter(myListAdapter);
testList.setOnItemClickListener(null);
testList.setEnabled(false);

现在这个工作正常,我可以单击测试项目中列表后面的按钮,但是,当我在原始项目中执行相同的操作时,它不起作用。

任何人都可以指出为什么会发生这种情况???

谢谢

0 个答案:

没有答案