徐修杰 2015-08-03 09:32 采纳率: 100%
浏览 2303

scrollview中嵌套SwipeListView在侧滑删除的时候禁止listview的上下滑动

scrollview中嵌套listview ,listview的长度超过屏幕的话就找不到scrollview的焦点了,listview是继承SwipeMenuListView可以左右滑动。 已经在listview中设置

 /**
     * 设置不滚动
     */
    @Override    
    public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

        int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,    
                MeasureSpec.AT_MOST);
        super.onMeasure(widthMeasureSpec, expandSpec);    
    } 

listview是还是可以上下滑动。求大神帮帮忙。

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-04 03:36
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    要解决这个问题,你需要修改你的SwipeMenuListView的布局,并添加一些额外的逻辑来处理滑动事件。以下是一个示例:

    1. 在你的SwipeMenuListView的布局文件中,添加一个滑动监听器(例如:SwipeRefreshLayout),并为它绑定到onRefresh()方法上。

    2. 当用户滑动时,你可以使用setOnScrollListener()方法来监听滑动事件。当用户向下滑动时,你应该阻止滑动,并更新你的数据源。

    以下是修改后的代码示例:

    <androidx.swiperefreshlayout.widget.SwipeRefreshLayout
        android:id="@+id/swipe_refresh_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    
        <com.google.android.material.list.RecyclerView
            android:id="@+id/recycler_view"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
    
    </androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
    
    // SwipeMenuListView的代码
    
    public class MySwipeMenuListView extends SwipeMenuListView implements OnScrollChangeListener {
        private RecyclerView recyclerView;
        private LinearLayoutManager layoutManager;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            // 初始化RecyclerView和LayoutManager
            recyclerView = new RecyclerView(this);
            layoutManager = new LinearLayoutManager(this);
    
            // 将RecyclerView添加到SwipeMenuListView
            setRecyclerAdapter(new CustomAdapter());
            
            // 添加滑动监听器
            addOnScrollListener(this);
    
            // 将RecyclerView设置为主视图
            setContentView(recyclerView);
        }
    
        @Override
        public boolean onTouchEvent(MotionEvent event) {
            return false;
        }
    
        @Override
        public void onScrollChange(int x, int y, int oldX, int oldY) {
            if (y > getMeasuredHeight() / 2 && !isRefreshing()) {
                stopRefreshing();
            } else if (oldY == 0 && y < getMeasuredHeight() / 2) {
                startRefreshing();
            }
        }
    
        // 滑动监听器实现类
        private class MyOnScrollChangeListener implements OnScrollChangeListener {
            @Override
            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                // 这里可以添加更多自定义的滑动逻辑
                System.out.println("On scroll change");
            }
        }
    
        // 初始刷新状态
        private boolean isRefreshing = false;
    
        // 停止刷新状态
        private boolean isStoppedRefreshing = false;
    
        // 开始刷新状态
        private boolean isStartingRefreshing = false;
    
        // 跳过刷新状态
        private boolean isSkippedRefreshing = false;
    
        // 调用的方法
        private void startRefreshing() {
            // 如果不是正在刷新,停止当前的刷新状态
            if (!isRefreshing) {
                isStartingRefreshing = true;
                // 更新数据源
                updateDataSource();
                // 起始刷新
                startLoading(false);
            }
        }
    
        // 停止刷新状态
        private void stopRefreshing() {
            // 如果正在刷新或已经跳过了刷新,继续刷新状态
            if ((isRefreshing || isSkippedRefreshing) && !isStartingRefreshing) {
                isStartingRefreshing = true;
                // 更新数据源
                updateDataSource();
                // 停止刷新
                stopLoading(false);
            }
        }
    
        // 更新数据源
        private void updateDataSource() {
            // 根据需要更新数据源
            // ...
        }
    
        // 启动加载数据
        private void startLoading(boolean isAuto) {
            // 根据需要启动加载数据
            // ...
        }
    
        // 停止加载数据
        private void stopLoading(boolean isAuto) {
            // 根据需要停止加载数据
            // ...
        }
    }
    

    这个例子中的代码只是一个基本的示例,你可能需要根据你的具体需求进行调整。例如,你可以添加更多的滑动检测逻辑、更新数据源等。

    评论

报告相同问题?

悬赏问题

  • ¥30 基于信创PC发布的QT应用如何跨用户启动后输入中文
  • ¥20 非root手机,如何精准控制手机流量消耗的大小,如20M
  • ¥15 远程安装一下vasp
  • ¥15 自己做的代码上传图片时,报错
  • ¥15 Lingo线性规划模型怎么搭建
  • ¥15 关于#python#的问题,请各位专家解答!区间型正向化
  • ¥15 unity从3D升级到urp管线,打包ab包后,材质全部变紫色
  • ¥50 comsol温度场仿真无法模拟微米级激光光斑
  • ¥15 上传图片时提交的存储类型
  • ¥15 VB.NET如何绘制倾斜的椭圆