2013-04-29 149 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