You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio中如何跳转至其他Activity的ScrollView指定ID项?

解决方案:跳转至另一个Activity的ScrollView并滚动到指定位置

你当前的代码无法生效,原因是在Activity A中直接调用findViewById获取的是A布局内的控件,而非即将启动的Activity B的控件——此时Activity B还未创建,布局也未加载,自然找不到对应的ScrollView和子View。

以下是正确的实现步骤:

步骤1:在Activity A中传递目标View的ID

修改按钮点击事件代码,通过Intent把要滚动到的子View的ID传递给Activity B:

public void HafalanHarian(View view) {
    Intent intent = new Intent(MainActivity.this, HafalanHarian.class);
    // 传递目标子View的ID,自定义键名"TARGET_VIEW_ID"
    intent.putExtra("TARGET_VIEW_ID", R.id.BoxDefinisi);
    startActivity(intent);
}

步骤2:在Activity B中处理滚动逻辑

在Activity B的onCreate方法里,先加载布局,再获取传递的ID,找到目标子View后执行滚动操作。注意要等布局完全绘制完成后再滚动,确保获取到正确的坐标:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_hafalan_harian); // 替换为你的Activity B布局文件

    // 获取传递的目标View ID
    int targetViewId = getIntent().getIntExtra("TARGET_VIEW_ID", -1);
    if (targetViewId == -1) {
        // 未传递有效ID时,不执行滚动
        return;
    }

    ScrollView scrollView = findViewById(R.id.ScrollHafHar);
    View targetView = findViewById(targetViewId);

    // 等待布局绘制完成后执行滚动
    scrollView.post(() -> {
        // 计算目标View相对于ScrollView的顶部偏移量
        int scrollY = targetView.getTop();
        // 直接滚动到目标位置
        scrollView.scrollTo(0, scrollY);
        // 若需要平滑滚动,替换为:scrollView.smoothScrollTo(0, scrollY);
    });
}

补充说明

  • 若追求更流畅的交互效果,可将scrollTo替换为smoothScrollTo实现平滑滚动。
  • 确保Activity B的布局中确实存在ID为ScrollHafHar的ScrollView和BoxDefinisi的子View,避免空指针异常。

内容的提问来源于stack exchange,提问作者miftha akbie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 00:45:17