我有以下情况:

我正在使用抽屉导航让用户轻松地在不同主题之间导航。

您可以在此处找到图片:

https://drive.google.com/file/d/0B2gMUEFwlGRfSHRzVlptYmFQTXc/edit?usp=sharing

当点击一个标题时,比如 一般 唯一的主要内容 View 被替换,通过使用 fragment 和布局文件。
但是当用户点击一个副标题时,比如 Gameplay ,布局会发生变化,它应该向下滚动到布局中的特定 View 。

因此,在我的 fragment 类中,我使用了 ScrollView 提供的“onViewCreated”方法和 smoothScrollTo 方法。 ScrollView和RelativeLayout都不为null,并设置为正确的id,在“onCreateView”中设置

代码 fragment :

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    if (getArguments().getBoolean(ARG_BOOL)) {
        scrollView = (ScrollView)getView().findViewById(scrollID);
        relativeLayout = (RelativeLayout)getView().findViewById(relativeID);

        ((ScrollView)getView().findViewById(scrollID)).smoothScrollTo(
                0, (getView().findViewById(relativeID)).getLeft());

        Toast.makeText(getApplicationContext(), "SCROLL",Toast.LENGTH_SHORT).
                show();
        }
     }

问题是它没有执行“smoothScrollTo”方法,而 toast 被执行。

这里我调用fragment(boolean scroll是用来控制smoothScrollTo方法的):
private void selectItem(int Id, boolean scroll) {
    Fragment fragment = new ContentFragment();
    Bundle args = new Bundle();
    args.putBoolean(ContentFragment.ARG_BOOL, scroll);
    args.putInt(ContentFragment.ARG_ITEM_ID, Id);
    fragment.setArguments(args);

    // Insert the fragment by replacing any existing fragment
    FragmentManager fragmentManager = getFragmentManager();
    fragmentManager.beginTransaction()
            .replace(R.id.content_frame, fragment)
            .commit();
    // Highlight the selected item, update the title, and close the drawer
    TextView textView = (TextView) findViewById(Id);
    getActionBar().setTitle(textView.getText());
    mDrawerLayout.closeDrawer(mDrawerList);
}

谢谢你的帮助 ;-)

编辑:
解决方案:
if (getArguments().getBoolean(ARG_BOOL)) {
    getView().findViewById(scrollID).post(new Runnable() {
        @Override
        public void run() {
            ((ScrollView) getView().findViewById(scrollID)).
                smoothScrollTo(0, (getView().findViewById(relativeID)).getTop());
        }
    });
}

最佳答案

尝试在调用 View 的 smoothScrollTo 时调用 post 方法:

ScrollView scrollView = (ScrollView)getView().findViewById(scrollID);
scrollView.post(new Runnable() {

    @Override
    public void run() {
        scrollView.smoothScrollTo(0,(getView().findViewById(relativeID)).getTop());
    }
});

10-08 17:14