返回时,我在将片段滚动到上一个位置时遇到了同样的问题。在 onResume() 中不能滚动。我怀疑当您发布可运行文件时(正如您在问题中提到的那样),无法保证它是否会起作用。
我找到了2个解决方案,希望这会有所帮助:
1)更通用的方法,仍然不适用于 API 级别 < 11:
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// inflate your main view
mView = inflater.inflate(R.layout.your_fragment_id, container, false);
// find your scroll view
mScrollContainer = (ScrollView) mView.findViewById(R.id.scroll_container);
// add OnLayoutChangeListener
mView.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
@Override
public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
// get your X and Y to scroll to
...
mScrollContainer.scrollTo(x,y);
}
}
});
}
你应该从你自己的源(比如你自己的包)中获取 X 和 Y,因为在大多数情况下 - 当活动不保存它的状态时 - 你不能使用片段的 savedInstanceState (见这里)
2)更具体但有时更有用的方法是为显示片段后获得焦点的元素设置 OnFocusChangeListener :
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
...
mListView.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
// do your scrolling here
}
});
}