2012-12-05 87 views
0

我想在我的應用程序中使用JakeWharton庫。我喜歡示例SampleTabsDefault樣本:enter image description here 現在,我卡住了。在這個示例只改變文本,我想改變片段(每個片段有自己的佈局,每個佈局有不同的控制像按鈕,複選框等)。我想我必須改變這個方法在類從FragmentPagerAdapter擴展:ViewPagerIndicator - 如何在片段之間跳轉

public Fragment getItem(int position) { 
      return TestFragment.newInstance(CONTENT[position % CONTENT.length]); 
     } 

我想根據特定的位置創建新的片段(具有自己的佈局)。

我已經實現了這個代碼:

public class MainActivity extends FragmentActivity { 
    private static final String[] CONTENT = new String[] {"My Profile", "Statistics"}; 

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

     FragmentPagerAdapter adapter = new GoogleMusicAdapter(getSupportFragmentManager()); 

     ViewPager pager = (ViewPager)findViewById(R.id.pager); 
     pager.setAdapter(adapter); 

     TabPageIndicator indicator = (TabPageIndicator)findViewById(R.id.indicator); 
     indicator.setViewPager(pager); 



     } 


    class GoogleMusicAdapter extends FragmentPagerAdapter { 
     public GoogleMusicAdapter(FragmentManager fm) { 
      super(fm); 
     } 


     public Fragment getItem(int position) { 
      if (position==0) 
      return MyProfile.newInstance(CONTENT[position % CONTENT.length]); 
      else if (position==1) 
      return Statistics.newInstance(CONTENT[position % CONTENT.length]); 
      return null; 
     } 

     @Override 
     public CharSequence getPageTitle(int position) { 
      return CONTENT[position % CONTENT.length].toUpperCase(); 
     } 

     @Override 
     public int getCount() { 
      return CONTENT.length; 
     } 
    } 
} 

public class MyProfile extends Fragment { 
     private static final String KEY_CONTENT = "TestFragment:Content"; 


     public static MyProfile newInstance(String content) { 
      MyProfile fragment = new MyProfile(); 

      fragment.mContent = content; 

      return fragment; 
     } 

     private String mContent = "???"; 

     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 

      if ((savedInstanceState != null) && savedInstanceState.containsKey(KEY_CONTENT)) { 
       mContent = savedInstanceState.getString(KEY_CONTENT); 
      } 


     } 

     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
       Bundle savedInstanceState) { 
      View view = inflater.inflate(R.layout.fragment_basic, container, false); 
      Button button = (Button) view.findViewById(R.id.fragment_button); 

      button.setOnClickListener(new OnClickListener() { 

       public void onClick(View v) { 
        Activity activity = getActivity(); 

        if (activity != null) { 
         Toast.makeText(activity, "fragmen1", Toast.LENGTH_SHORT).show(); 
        } 
       } 

      }); 

      return view; 
     } 
      public void onSaveInstanceState(Bundle outState) { 
       super.onSaveInstanceState(outState); 
       outState.putString(KEY_CONTENT, mContent); 
      } 
} 

這:

public class Statistics extends Fragment { 
     private static final String KEY_CONTENT = "TestFragment:Content"; 


     public static Statistics newInstance(String content) { 
      Statistics fragment = new Statistics(); 

      fragment.mContent = content; 

      return fragment; 
     } 

     private String mContent = "???"; 

     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 

      if ((savedInstanceState != null) && savedInstanceState.containsKey(KEY_CONTENT)) { 
       mContent = savedInstanceState.getString(KEY_CONTENT); 
      } 


     } 

     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
       Bundle savedInstanceState) { 
      View view = inflater.inflate(R.layout.fragment_basic2, container, false); 
      Button button = (Button) view.findViewById(R.id.fragment_button); 

      button.setOnClickListener(new OnClickListener() { 

       public void onClick(View v) { 
        Activity activity = getActivity(); 

        if (activity != null) { 
         Toast.makeText(activity, "fragmen2", Toast.LENGTH_SHORT).show(); 
        } 
       } 

      }); 

      return view; 
     } 

      @Override 
      public void onSaveInstanceState(Bundle outState) { 
       super.onSaveInstanceState(outState); 
       outState.putString(KEY_CONTENT, mContent); 
      } 
} 

,它不工作...我不能切換頁面,並且我的分段佈局不顯示...

回答

2

在您的FragmentPagerAdapter中您的getItem()方法中,您可以根據位置返回其他片段。例如:

public Fragment getItem(int position) { 
switch(position) 
     { 
       case 0: 
        TestFragment fragment = new TestFragment(); 
        return fragment; 

       case 1: 
        TestFragment2 fragment2 = new TestFragment2(); 
        return fragment2; 

     } 

        DefaultFragment fragment3 = new DefaultFragment(); 
        return fragment3; 

     } 
+0

仍然無法使用。也許原因是setContentView(R.layout.activity_main);在MainActivity類? –

+1

不,這是您的ViewPager在其中的佈局。你的LogCat說什麼? – Ahmad

+0

當應用程序啓動switch方法調用兩個第一個構造函數(片段1和片段2中的onCreate和onCreateView方法)。每個佈局都不顯示任何內容,我無法滑動屏幕,但我可以在任何選項卡上手動按下。 –