2012-12-05 89 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方法)。每个布局都不显示任何内容,我无法滑动屏幕,但我可以在任何选项卡上手动按下。 –