使用ViewPager和Fragment时会出现一些问题

时间:2015-10-15 13:05:50

标签: android

  

它只是一个关于如何加载片段的问题   有具体的代码:

公共类MainActivity扩展了FragmentActivity {

private Handler handler;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ViewPager pager = (ViewPager) findViewById(R.id.pager);
    List<Fragment> fragments = new LinkedList<>();
    BlankFragment blankFragment = new BlankFragment();
    fragments.add(blankFragment);
    handler = blankFragment.getHandler();
    ContactPagerAdapter adapter = new ContactPagerAdapter(getSupportFragmentManager(), fragments);
    pager.setAdapter(adapter);
}

@Override
protected void onResume() {
    super.onResume();
    handler.sendEmptyMessage(0);
}

}

  

片段 - 只打印一些日志:

class BlankFragment extends Fragment {

private Handler handler = new Handler(){
    @Override
    public void handleMessage(Message msg) {
        Log.d("TAG", "-->>19 handleMessage");
    }
};

public Handler getHandler() {
    return handler;
}

public BlankFragment() {
    // Required empty public constructor
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Log.d("TAG", "-->>34 onCreate");
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    Log.d("TAG", "-->>40 onCreateView");
    // Inflate the layout for this fragment
    return inflater.inflate(R.layout.fragment_blank, container, false);
}

}

  

和logcat打印:        - &gt;&gt; 19 handleMessage        - &gt;&gt; 34 onCreate        - &gt;&gt; 40 onCreateView

我不明白为什么打印这些。感谢

1 个答案:

答案 0 :(得分:0)

以下事件链导致问题中提到的输出被打印出来:

    调用
  1. MainActivity的{​​{1}}方法,将空消息发布到附加到主(UI)线程的消息队列的onResume()。这会将Handler打印到日志中。
  2. -->>19 handleMessage现在已准备好与用户进行交互,并且需要显示包含MainActivity的UI。 BlankFragment通过按此顺序调用SupportFragmentManagerBlankFragment方法来初始化onCreate()。这会分别打印onCreateView()-->>34 onCreate
  3. -->>40 onCreateView片段回调中,您应该执行一次性初始化,在onCreate()中,您应该返回片段显示的onCreateView()层次结构。