Android 在可扩展列表视图中禁用自动滚动

2024-02-08

我在可扩展列表视图中使用,当我打开列表视图中的某个项目时,我的滚动会自动聚焦在打开的项目上,我可以阻止列表聚焦在新项目上并停留在同一个地方吗?我尝试从打开的视图中删除可聚焦的内容,但它不起作用。


您需要重写 OnGroupClickListener 并使用该事件。这将避免 ExpandableListView 执行默认操作,至少在针对 4.3 进行编译时是平滑滚动到该位置。

这是一个实现示例:

        expandableListView.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {
        @Override
        public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) {
            if(parent.isGroupExpanded(groupPosition)){
                parent.collapseGroup(groupPosition);
            }else{
                boolean animateExpansion = false;
                parent.expandGroup(groupPosition,animateExpansion);
            }
            //telling the listView we have handled the group click, and don't want the default actions.
            return true;
        }
    });

如果您使用该事件,则需要在需要时复制一些默认行为。这包括播放音效和调用展开/折叠侦听器。

为了参考默认行为,我将发布它,取自 Android 源代码 (4.3)

    //in ExpandableListView.java 
    boolean handleItemClick(View v, int position, long id) {
    final PositionMetadata posMetadata = mConnector.getUnflattenedPos(position);

    id = getChildOrGroupId(posMetadata.position);

    boolean returnValue;
    if (posMetadata.position.type == ExpandableListPosition.GROUP) {
        /* It's a group, so handle collapsing/expanding */

        /* It's a group click, so pass on event */
        if (mOnGroupClickListener != null) {
            if (mOnGroupClickListener.onGroupClick(this, v,
                    posMetadata.position.groupPos, id)) {
                posMetadata.recycle();
                return true;
            }
        }

        if (posMetadata.isExpanded()) {
            /* Collapse it */
            mConnector.collapseGroup(posMetadata);

            playSoundEffect(SoundEffectConstants.CLICK);

            if (mOnGroupCollapseListener != null) {
                mOnGroupCollapseListener.onGroupCollapse(posMetadata.position.groupPos);
            }
        } else {
            /* Expand it */
            mConnector.expandGroup(posMetadata);

            playSoundEffect(SoundEffectConstants.CLICK);

            if (mOnGroupExpandListener != null) {
                mOnGroupExpandListener.onGroupExpand(posMetadata.position.groupPos);
            }

            final int groupPos = posMetadata.position.groupPos;
            final int groupFlatPos = posMetadata.position.flatListPos;

            final int shiftedGroupPosition = groupFlatPos + getHeaderViewsCount(); 
            smoothScrollToPosition(shiftedGroupPosition + mAdapter.getChildrenCount(groupPos),
                    shiftedGroupPosition);
        }

        returnValue = true;
    } else {
        /* It's a child, so pass on event */
        if (mOnChildClickListener != null) {
            playSoundEffect(SoundEffectConstants.CLICK);
            return mOnChildClickListener.onChildClick(this, v, posMetadata.position.groupPos,
                    posMetadata.position.childPos, id);
        }

        returnValue = false;
    }

    posMetadata.recycle();

    return returnValue;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 在可扩展列表视图中禁用自动滚动 的相关文章

  • Android Room ORM:支持 SQLite 的自定义构建

    我需要使用 SQLite 的自定义构建 基于 sqlite org 版本https sqlite org android doc trunk www index wiki https sqlite org android doc trunk
  • 使用 NEON 内在函数除以浮点数

    我当时正在处理四个像素的图像 这是在armv7对于 Android 应用程序 我想分一个float32x4 t向量由另一个向量组成 但其中的数字与大约不同0 7 to 3 85 在我看来 除法的唯一方法是使用右移 但这是针对一个数字2 n
  • 如何实现 ALTER TABLE 的示例[重复]

    这个问题在这里已经有答案了 我已经多次问过这个问题 但尚未得到完整的答案 如何实现 ALTER TABLE 语句以向数据库添加列 有人可以给我举个例子吗 请阅读SQLite ALTER TABLE 参考 http sqlite org la
  • Android:文本淡入和淡出

    我已阅读此 stackoverflow 问题和答案 并尝试实现文本淡入和淡出 Android中如何让文字淡入淡出 https stackoverflow com questions 8627211 how to make text fade
  • Android studio - 如何保存先前活动中选择的数据

    这是我的代码片段 这Textview充当按钮并具有Onclicklistner在他们 当cpu1000时Textview单击它会导致cpu g1000其代码如下所示的类 public class Game 1000 extends AppC
  • SQLite FTS4 使用特殊字符进行搜索

    我有一个 Android 应用程序 它使用 FTS4 虚拟表在 SQLite 数据库中搜索数据 它工作正常 但是当表中的数据包含特殊字符 如 或 时 SQLite MATCH 函数不会给出任何结果 我现在迷路了 谢谢 注意 默认的分词器真的
  • Android 辅助功能服务检测通知

    我试图让我的应用程序在显示通知时进行检测 我已在设置应用程序中启用它并且onServiceConnected确实接到电话 但是当我创建通知或通过 gmail 应用程序接收电子邮件时 什么也没有发生 onAccessibilityEvent没
  • RecyclerView 在聊天屏幕中的 notificationDataSetChanged 上滚动到顶部

    我正在尝试使用 recyclerView 创建消息传递类型的屏幕 该屏幕将从底部开始 并在用户到达聊天顶端时加载更多数据 但我面临着这个奇怪的问题 我的 recyclerView 在调用 notificationDataSetChanged
  • Android NDK 支持区域设置吗?

    我真正想做的就是使用格式化日期strftime x 以正确的顺序 在大多数平台上调用setlocale 足够 在 Android 上 我不断收到 美国日期 那么 Android 不支持语言环境吗 No setlocale and strft
  • Android 无法解析日期异常

    当尝试解析发送到我的 Android 客户端的日期字符串时 我得到一个无法解析的日期 这是例外 java text ParseException 无法解析的日期 2018 09 18T00 00 00Z 位于 偏移量 19 在 java t
  • Android:canvas.drawBitmap() 方法无法正常工作

    我已经发布了两个与此相关的问题 请参考此自定义饼图 1 https stackoverflow com questions 28343600 customize pie chart in quarter shape at the botto
  • Jetpack Compose 中复选框中的透明复选标记

    在我的 Compose 应用程序中 我需要创建一个圆形复选框 我已经通过下面的代码实现了这一点 Composable fun CircleCheckBox isChecked Boolean modifier Modifier Modifi
  • Android:如何创建模态进度“轮”叠加层?

    我想在我的视图上显示模式进度 轮子 叠加层 ProgressDialog 很接近 但我不想要对话框背景或边框 我尝试设置对话框窗口的背景可绘制 this progressDialog new ProgressDialog Main this
  • 蓝牙发送和接收文本数据

    我是 Android 开发新手 我想制作一个使用蓝牙发送和接收文本的应用程序 我得到了有关发送文本的所有内容逻辑工作 但是当我尝试在手机中测试它时 我看不到界面 这是Main Activity Code import android sup
  • Android 为什么这不会抛出错误的线程异常?

    我的印象是视图只能从主线程操作 但是 为什么这不会崩溃 public class MainActivity extends Activity TextView tv Override protected void onCreate Bund
  • 以编程方式向 LinearLayout 添加边框

    我该如何添加以编程方式LinearLayout 的边框 假设我们创建了这个布局 LinearLayout TitleLayout new LinearLayout getApplicationContext TitleLayout setO
  • 在android中从SD卡上传图像到facebook

    我无法从 SD 卡上传 Facebook 上的图像 我使用了下面的代码 但它没有给我错误 但同时它没有上传图像 byte data null try FileInputStream fis new FileInputStream filep
  • android系统用户和linux root用户有什么区别

    当我将手机连接到电脑并使用adb shell与我的手机通信并输入的命令ps命令输出当前在我的手机上运行的进程信息 我发现有两个特殊用户 一个是root 另一个是system 据我所知 Android是基于linux的 所以root用户是最大
  • 如何解决 greenDAO 在执行 InsertOrReplace 时“不存在这样的表错误”?

    我正在使用 greenDAO 并且已成功生成所有必需的类和实体 并且我可以看到我的表已创建 但是在要替换的行上放置断点后 我收到一条错误消息 告诉我 不存在这样的表错误 try appTimeUsageDao insertOrReplace
  • 在线性布局内的 ScrollView 内并排对齐 TextView

    我有一个带有滚动视图的线性布局 我想保留它的当前格式 但只需将 textView2a 和 textView3a 并排放置 而不会破坏我当前的布局格式 我已经包含了我最近的尝试 但它们似乎不正确 提前致谢 Java菜鸟 当前有效的 XML

随机推荐