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
相关产品推荐
相关产品推荐

