2016-06-15 7 views
0

このサンプルはAndroidデベロッパーからダウンロードしました(これはナビゲーション用の引き出しです)、Androidの開発が本当に新しいので、完全に断片を完全に理解することはできません。このコードでは、どのフラグメントが変更され、どのフラグメントが画面に表示されるのかを実際に書いていますか?どこで.javaコードがフラグメントの変更ですか?

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    mTitle = mDrawerTitle = getTitle(); 
    mPlanetTitles = getResources().getStringArray(R.array.planets_array); 
    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 
    mDrawerList = (ListView) findViewById(R.id.left_drawer); 
    mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START); 
    mDrawerList.setAdapter(new ArrayAdapter<String>(this, 
      R.layout.drawer_list_item, mPlanetTitles)); 
    mDrawerList.setOnItemClickListener(new DrawerItemClickListener()); 

    getActionBar().setDisplayHomeAsUpEnabled(true); 
    getActionBar().setHomeButtonEnabled(true); 

    mDrawerToggle = new ActionBarDrawerToggle(
      this,     /* host Activity */ 
      mDrawerLayout,   /* DrawerLayout object */ 
      R.drawable.ic_drawer, /* nav drawer image to replace 'Up' caret */ 
      R.string.drawer_open, /* "open drawer" description for accessibility */ 
      R.string.drawer_close /* "close drawer" description for accessibility */ 
      ) { 
     public void onDrawerClosed(View view) { 
      getActionBar().setTitle(mTitle); 
      invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu() 
     } 

     public void onDrawerOpened(View drawerView) { 
      getActionBar().setTitle(mDrawerTitle); 
      invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu() 
     } 
    }; 
    mDrawerLayout.setDrawerListener(mDrawerToggle); 

    if (savedInstanceState == null) { 
     selectItem(0); 
    } 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    return super.onCreateOptionsMenu(menu); 
} 

@Override 
public boolean onPrepareOptionsMenu(Menu menu) { 
    boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList); 
    return super.onPrepareOptionsMenu(menu); 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    if (mDrawerToggle.onOptionsItemSelected(item)) { 
     return true; 
    } 
    switch(item.getItemId()) { 
    default: 
     return super.onOptionsItemSelected(item); 
    } 
} 

private class DrawerItemClickListener implements ListView.OnItemClickListener { 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
     selectItem(position); 
    } 
} 

private void selectItem(int position) { 
    Fragment fragment = new PlanetFragment(); 
    Bundle args = new Bundle(); 
    args.putInt(PlanetFragment.ARG_PLANET_NUMBER, position); 
    fragment.setArguments(args); 

    FragmentManager fragmentManager = getFragmentManager(); 
    fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit(); 

    mDrawerList.setItemChecked(position, true); 
    setTitle(mPlanetTitles[position]); 
    mDrawerLayout.closeDrawer(mDrawerList); 
} 

@Override 
public void setTitle(CharSequence title) { 
    mTitle = title; 
    getActionBar().setTitle(mTitle); 
} 

@Override 
protected void onPostCreate(Bundle savedInstanceState) { 
    super.onPostCreate(savedInstanceState); 
    mDrawerToggle.syncState(); 
} 

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
    mDrawerToggle.onConfigurationChanged(newConfig); 
} 

public static class PlanetFragment extends Fragment { 
    public static final String ARG_PLANET_NUMBER = "planet_number"; 
    public PlanetFragment() { 
    } 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.fragment_planet, container, false); 
     int i = getArguments().getInt(ARG_PLANET_NUMBER); 
     String planet = getResources().getStringArray(R.array.planets_array)[i]; 

     int imageId = getResources().getIdentifier(planet.toLowerCase(Locale.getDefault()), 
         "drawable", getActivity().getPackageName()); 
     ((ImageView) rootView.findViewById(R.id.image)).setImageResource(imageId); 
     getActivity().setTitle(planet); 
     return rootView; 
    } 
} 

答えて

1

コードのこの部分:

FragmentManager fragmentManager = getFragmentManager(); 
fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit(); 

は、フラグメントを変更する責任があります。ご覧のとおり、フラグメントの追加や置換などの操作は、FragmentTransactionというオブジェクトで行われます。このメソッドはbeginTransactionを返します。

メソッドreplaceは、第1引数として与えられたコンテナ内のものを、第2引数として与えられたフラグメントに置き換えます。

メソッドコミットするだけで、このトランザクションのコミットがスケジュールされます。

詳しくはhereをご覧ください。あなたが何であるかをメソッドチェーンわからない場合

は、答えるためhere.

+0

のTyをお読みください。ですから、たとえば、fragment_mainという名前のフラグメントを画面に表示したい場合は、コード内の「フラグメント」を「R.id.fragment_main」に置き換えます。 – Leonz

+0

いいえ、 'MainFragment fragment = MainFragment.newInstance()'のような新しいフラグメントを作成し、第2パラメータとして 'fragment'を' replace'関数に渡します。最初のパラメータは同じです。コンテナ。 – Vucko

関連する問題