当片段返回时(onResume未调用),如何控制焦点和滚动位置?

时间:2014-09-15 23:55:20

标签: android android-layout android-activity android-viewpager android-lifecycle

我的主要活动中的ViewPager中有3个标签。当我从选项卡2返回选项卡1时,我想滚动到顶部并将焦点放在第一个EditText中。但是,Tab 1的onResume片段方法没有被调用,所以在哪里可以设置视图?谢谢。

以下是我在Activity中设置onPageChangeListener的代码。

mViewPager.setOnPageChangeListener(
            new ViewPager.SimpleOnPageChangeListener() {
                @Override
                public void onPageSelected(int position) {
                    getActionBar().setSelectedNavigationItem(position);
                    mPagerAdapter.getItem(position).onResume(); // trying to call onResume
                }
            });

这是我的片段onCreate

@Override
public View onCreateView(LayoutInflater inflater,
        ViewGroup container, Bundle savedInstanceState) {

    rootView = inflater.inflate(
            R.layout.fragment_new_grade_calc, container, false);

    context = this.getActivity();

    bindAll();     // map ScrollView and other views as Java Objects
    setListeners(); // set listeners for objects

    if(savedInstanceState != null){
        setRestoredViews(savedInstanceState);
    } else
        setInitialViews(); 


    return rootView;
}

我的片段onResume

@Override
public void onResume(){
    super.onResume();
    final ScrollView sv = (ScrollView) rootView.findViewById(R.id.scrollview_new_grade);
         // ^^this is what gets the NullPonterException

    sv.post(new Runnable() {
        @Override
        public void run() {
            sv.fullScroll(ScrollView.FOCUS_UP);
        }
    });
}

2 个答案:

答案 0 :(得分:0)

你有Ontabselcted方法或onpageselected方法,你可以滚动到顶部。

答案 1 :(得分:0)

我找到了answer in this thread

覆盖此回调。我必须检查以确保我的视图为非null,以避免首次加载时出现问题。

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if (isVisibleToUser) { }
    else {  }
}