2013-10-06 37 views
1

我對android應用程序開發完全陌生,目前我正在爲學校開發一個項目。如何使用導航抽屜選擇視圖預覽器

從我的理解到目前爲止,您可以使用導航抽屜來換出UI片段。 我犯了一個導航抽屜裏說的那麼遠基於這裏給出的教程正常工作:

https://developer.android.com/training/implementing-navigation/nav-drawer.html

我試圖把它切換視圖會針對與選擇的每一個項目。我做了一個視圖分頁器片段活動,我希望程序在導航抽屜(索引3)中選擇第4個項目時用我的視圖分頁器替換視圖。我在我的片段類中添加了一個switch語句,以確定要加載哪個佈局。

下面是爲導航抽屜的活動:

package com.mkge.mkg; 

import android.content.res.Configuration; 
import android.os.Bundle; 
import android.support.v4.app.ActionBarDrawerToggle; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.widget.DrawerLayout; 
import android.view.LayoutInflater; 
import android.view.Menu; 
import android.view.MenuInflater; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 

public class MainActivity extends FragmentActivity { 
    private DrawerLayout mDrawerLayout; 
    private ListView mDrawerList; 
    private ActionBarDrawerToggle mDrawerToggle; 

    private CharSequence mTitle; 
    private String[] mPageTitles; 

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

     mTitle = getTitle(); 
     mPageTitles = getResources().getStringArray(R.array.nav_draw_array); 
     mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 
     mDrawerList = (ListView) findViewById(R.id.left_drawer); 

     mDrawerList.setAdapter(new ArrayAdapter<String>(this, R.layout.drawer_list_item, mPageTitles)); 
     mDrawerList.setOnItemClickListener(new DrawerItemClickListener()); 

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

     mDrawerToggle = new ActionBarDrawerToggle(
       this, 
       mDrawerLayout, 
       R.drawable.ic_drawer, 
       R.string.drawer_open, 
       R.string.drawer_close 
       ) { 
      public void onDrawerClosed(View view) { 
       getActionBar().setTitle(mTitle); 
       invalidateOptionsMenu(); 
      } 

      public void onDrawerOpened(View drawerView) { 
       getActionBar().setTitle(R.string.drawer_open); 
       invalidateOptionsMenu(); 
      } 
     }; 
     mDrawerLayout.setDrawerListener(mDrawerToggle); 

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

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

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     if (mDrawerToggle.onOptionsItemSelected(item)) return true; 
     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 PageFragment(); 
     Bundle args = new Bundle(); 
     args.putInt(PageFragment.ARG_PAGE_NUMBER, position); 
     fragment.setArguments(args); 

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

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

    public static class PageFragment extends Fragment { 
     public static final String ARG_PAGE_NUMBER = "page_number"; 

     public PageFragment() { 
     } 

     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
      int i = getArguments().getInt(ARG_PAGE_NUMBER); 
      View rootView; 
      switch(i) { 
      case 0: 
       rootView = inflater.inflate(R.layout.page_home, container, false); 
       break; 
      case 1: 
       rootView = inflater.inflate(R.layout.page_services, container, false); 
       break; 
      case 2: 
       rootView = inflater.inflate(R.layout.page_packages, container, false); 
       break; 
      case 3: 
      View view = new MeetViewPager().getViewPager(); 
      rootView = view; 
      break; 
      case 4: 
       rootView = inflater.inflate(R.layout.page_about, container, false); 
       break; 
      case 5: 
       rootView = inflater.inflate(R.layout.page_contact, container, false); 
       break; 
      case 6: 
       rootView = inflater.inflate(R.layout.page_extras, container, false); 
       break; 
      default: 
       rootView = null; 
      } 

      String page = getResources().getStringArray(R.array.nav_draw_array)[i]; 
      getActivity().setTitle(page); 
      return rootView; 
     } 
    } 

    @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); 
    } 
} 

我做了這個片段活動在這裏創建視圖尋呼機。我試着把我在這裏製作的view pager對象傳遞給我的導航抽屜活動的switch語句。

package com.mkge.mkg; 

import java.util.ArrayList; 
import java.util.List; 

import android.annotation.SuppressLint; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentPagerAdapter; 
import android.support.v4.view.ViewPager; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 

@SuppressLint("ValidFragment") 
    public class MeetViewPager extends FragmentActivity { 
     public ViewPager mViewPager; 
     public FragmentPagerAdapter mViewPagerAdapter; 

     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.page_meet); 
      List<Fragment> fragments = getFragments(); 
      mViewPager = (ViewPager) findViewById(R.id.pager); 
      mViewPagerAdapter = new mPageAdapter(getSupportFragmentManager(), fragments); 
      mViewPager.setAdapter(mViewPagerAdapter); 
     } 

     public View getViewPager() { 
      return mViewPager; 
     } 

     private List<Fragment> getFragments() { 
      List<Fragment> fList = new ArrayList<Fragment>(); 
      Fragment fragment = new mFragment(); 
      Bundle args = new Bundle(); 
      args.putInt("position", 0); 
      fragment.setArguments(args); 
      fList.add(fragment); 

      fragment = new mFragment(); 
      args = new Bundle(); 
      args.putInt("position", 1); 
      fragment.setArguments(args); 
      fList.add(fragment); 

      return fList; 
     } 

     private class mPageAdapter extends FragmentPagerAdapter { 
      private List<Fragment> fragments; 

      public mPageAdapter(FragmentManager f, List<Fragment> fragments) { 
       super(f); 
       this.fragments = fragments; 
      } 

      @Override 
      public Fragment getItem(int position) { 
       return this.fragments.get(position); 
      } 

      @Override 
      public int getCount() { 
       return this.fragments.size(); 
      } 
     } 

     @SuppressLint("ValidFragment") 
     public static class mFragment extends Fragment { 

      public mFragment() { 
      } 

      public static final mFragment newInstance(int i) { 
       mFragment f = new mFragment(); 
       Bundle args = new Bundle(1); 
       args.putInt("position", i); 
       f.setArguments(args); 
       return f; 
      } 

      public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
       View v; 
       int i = getArguments().getInt("postion"); 
       switch(i) { 
       case 0: 
        v = inflater.inflate(R.layout.page_meet_0, container, false); 
        break; 
       case 1: 
        v = inflater.inflate(R.layout.page_meet_1, container, false); 
        break; 
       default: 
        v = null; 
       } 
       return v; 
      } 
     } 
    } 

任何幫助,將不勝感激謝謝。

+0

您是否找到解決方案?我被困在從導航抽屜中調用ViewPager。 – VipulKumar

回答

0
mViewPager.setCurrentItem(0); 

這應該是所有您需要使您的ViewPager更改爲第一個選項卡。

這將從selectItem()方法中調用。