2015-10-15 30 views
-1

時發生,它只是一個關於如何有具體的代碼加載片段 問題:有些問題是使用ViewPager和片段

公共類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的打印: - >> 19的handleMessage - >> 34的onCreate - >> 40 onCreateView

我不是理解它爲什麼打印這些。由於

回答

0

繼在你的問題中提到的輸出事件結果鏈得到印刷:

  1. MainActivityonResume()方法被調用哪些職位空消息來連接到主(UI)線程的消息Handler隊列。這將打印-->>19 handleMessage到日誌。
  2. MainActivity現在已準備好與用戶進行交互,並且需要顯示其包含BlankFragment的用戶界面。 SupportFragmentManager通過按順序調用其onCreate()onCreateView()方法來初始化BlankFragment。這分別打印-->>34 onCreate-->>40 onCreateView

onCreate()片段回調,你應該執行一次性初始化和onCreateView()你應該返回View層次由片段顯示。

+0

我明白了,但是當我調用viewPager.setAdapter()時,爲什麼沒有立即創建片段。在執行onResume()方法之前,Fragment尚未創建。 –

+0

片段在您執行'new BlankFragment()'的瞬間被創建(實例化)。但是,只有當片段(或包含它的ViewPager)需要顯示時,即活動恢復時,Android系統纔會調用'BlankFragment'的'onCreate()'和'onCreateView()'生命週期回調方法。 –

+0

我想現在我明白了,所以我將handler.sendMessage()修改爲handler.sendMessageDelay(fragment,500),這可能會顯示一些結果,但有時它會很好,而不好的效果是一週。 –