2013-04-29 152 views
0

我想在ViewPager中显示片段,我想要一个按钮来替换ViewPager中的片段。我设法使用exampleover在stackoverflow上找到。但是,如何在2 fragmentA和FragmentB之间切换。ViewPager中的片段显示

非常感谢。

我的代码如下:

/** 
* A {@link FragmentPagerAdapter} that returns a fragment corresponding to 
* one of the sections/tabs/pages. 
*/ 
public class SectionsPagerAdapter extends FragmentPagerAdapter { 
    private final FragmentManager mFragmentManager; 
    private Fragment mFragmentAtPos0; 
    private Fragment mFragmentAtPos1; 
    public SectionsPagerAdapter(FragmentManager fm) { 
     super(fm); 
     mFragmentManager=fm; 
    } 

    @Override 
    public int getItemPosition(Object object) 
    { 

     if (object instanceof FragmentA && mFragmentAtPos0 instanceof FragmentB) 
      return POSITION_NONE; 
     if (object instanceof FragmentB && mFragmentAtPos1 instanceof FragmentA) 
      return POSITION_NONE; 
     return POSITION_UNCHANGED; 
    } 

    @Override 
    public Fragment getItem(int position) { 
     // getItem is called to instantiate the fragment for the given page. 
     // Return a DummySectionFragment (defined as a static inner class 
     // below) with the page number as its lone argument. 
     switch (position){ 

     case 1: 
      if (mFragmentAtPos1 == null) 
      { 

       mFragmentAtPos1 = FragmentB.newInstance(new FirstPageFragmentListener() 
       { 
        public void onSwitchToNextFragment() 
        { 
         mFragmentManager.beginTransaction().remove(mFragmentAtPos1).commit(); 
         mFragmentAtPos1 = new FragmentA(); 
         notifyDataSetChanged(); 
         showToast("in switchtoNextFragmentA ------------1"); 
        } 
       }); 

      } 
      return mFragmentAtPos1; 

     case 0: 
      if (mFragmentAtPos0 == null) 
      { 
       mFragmentAtPos0 = FragmentA.newInstance(new FirstPageFragmentListener() 
       { 
        public void onSwitchToNextFragment() 
        { 
         mFragmentManager.beginTransaction().remove(mFragmentAtPos0).commit(); 
         mFragmentAtPos0 = new FragmentB(); 
         notifyDataSetChanged(); 
         showToast("in switchtoNextFragment"); 
        } 
       }); 
      } 
      return mFragmentAtPos0; 


     default: return null; 
     } 

     return null; 
    } 

    @Override 
    public int getCount() { 
     // Show 3 total pages. 
     return 3; 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     Locale l = Locale.getDefault(); 
     switch (position) { 
     case 0: 
      return getString(R.string.title_section1).toUpperCase(l); 
     case 1: 
      return getString(R.string.title_section2).toUpperCase(l); 
     case 2: 
      return getString(R.string.title_section3).toUpperCase(l); 
     } 
     return null; 
    } 
} 



public class FragmentB extends Fragment { 
Button button; 
static FragmentB b; 
static FirstPageFragmentListener fpl1; 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup group, Bundle saved) 
{ 
    return inflater.inflate(R.layout.frag_b, group, false); 
} 

public static Fragment newInstance(FirstPageFragmentListener firstPageFragmentListener) { 
    // TODO Auto-generated method stub 
    fpl1 = firstPageFragmentListener; 

    if (b == null) 
     b = new FragmentB(); 
    return b; 

} 


public static FragmentB newInstance() { 
    if (b == null) 
     b = new FragmentB(); 
    return b; 
    } 
@Override 
public void onActivityCreated (Bundle savedInstanceState) 
{ 
    super.onActivityCreated(savedInstanceState); 
    button = (Button) getActivity().findViewById(R.id.button2); 
    button.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      fpl1.onSwitchToNextFragment(); 

     } 
    }); 
    } 
} 

UPDATE:布局文件

<FrameLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_above="@+id/lbltime" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentRight="true" 
    android:layout_below="@+id/textView1" 
    android:id="@+id/framelayout"> 

    <android.support.v4.view.ViewPager 
     android:id="@+id/pager" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="#FFFFCC" > 
    </android.support.v4.view.ViewPager> 
</FrameLayout> 
+0

所以你想从O导航ne片段到另一个片段通过按一个按钮,我是吗? – 2013-04-29 11:24:57

+0

嗨Rickkky,是的,我想通过按下按钮导航到来回片段。 – sean 2013-04-30 00:46:27

+0

嗨,我做了你的建议后,我已经更新了我的qns版图文件。我的片段现在都在显示。我错过了一步吗? – sean 2013-04-30 11:05:09

回答

1

其简单的只是这样做

您的按钮内的onClick方法

Fragment f; 
     f = new FragmentTwo(); 
     FragmentTransaction ft = getFragmentSupportManager().beginTransaction(); 
     ft.replace(R.id.main_details_fragment_container, f); 
     ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); 
     ft.addToBackStack(null); 
     ft.commit(); 
+0

嗨,我尝试这样做时收到以下错误。 '04-30 05:57:01.079:E/AndroidRuntime(7647):致命例外:main 04-30 05:57:01.079:E/AndroidRuntime(7647):java.lang.IllegalArgumentException:No found for found for ID为0x7f08000e(com.i2r.myreader:id/layoutb)FragmentB {40dcc9d8#0 id = 0x7f08000e} 04-30 05:57:01.079:E/AndroidRuntime(7647):\t at android.support.v4.app .FragmentManagerImpl.moveToState(FragmentManager.java:903) 04-30 05:57:01.079:E/AndroidRuntime(7647):\t at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088)' – sean 2013-04-30 05:56:46

+0

有一个把你的视图寻呼机放在一个FrameLayout中,你是否在ft.replace中使用了Framelayout Id(R.id.main_details_fragment_container,f);如果不是,请把它放在Framelayout中。 – 2013-04-30 06:43:46

+0

你好我已经更新我的布局文件在我的qns后做你的建议。我的片段现在都在显示。我错过了一步吗? – sean 2013-04-30 11:03:07