2017-06-01 30 views
1

我在viewpager中有3個主要的片段,他們有幾個按鈕。我想讓每個按鈕導航到另一個片段並返回按鈕以返回到主片段。我試圖添加片段事務,但它不起作用。我在這裏做錯了什麼?如何使用Button在ViewPager中切換片段?

這是主要的片段之一

public class OneFragment extends Fragment implements View.OnClickListener{ 


    public OneFragment() { 

    } 


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

    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 

     return inflater.inflate(R.layout.fragment_one, container, false); 
    } 


    @Override 
    public void onClick(View v) { 
     switch (v.getId()){ 
      case R.id.aButton: 
       FragmentManager manager = getFragmentManager(); 
       FragmentTransaction transaction = manager.beginTransaction(); 
       transaction.replace(R.id.fragment_one, AFragment.newInstance()); 
       transaction.commit(); 
       break; 
     } 
    } 
} 

這是我想要導航

public class AFragment extends Fragment{ 

    public AFragment() { 

    } 
    public static AFragment newInstance() { 
     AFragment fragment = new AFragment(); 
     return fragment; 
    } 

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


    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 

     return inflater.inflate(R.layout.a_fragment, container, false); 
    } 

} 
+0

你是什麼輸出?或者你的程序不能工作的方式(現在的行爲是什麼) – DarkCygnus

+0

我無法從OneFragment切換到AFragment。 – gunessun

+0

當你按下這些按鈕時,它會做什麼或輸出? – DarkCygnus

回答

1

首先,在活動定義一個公共的方法來切換標籤在ViewPager片段,和還定義onBackPressed()覆蓋,它將在按下後退按鈕時選擇第一個索引:

public void selectIndex(int newIndex) { 
    mViewPager.setCurrentItem(newIndex); 
} 

@Override 
public void onBackPressed() { 
    int currentPosition = mViewPager.getCurrentItem(); 
    if (currentPosition != 0) { 
     mViewPager.setCurrentItem(0); 
    } else { 
    super.onBackPressed(); 
    } 
} 

然後,修改片段中的點擊監聽器,爲了調用selectIndex()方法:

@Override 
public void onClick(View v) { 
    switch (v.getId()){ 
     case R.id.aButton: 
      //select the index of AFragment: 
      ((MainActivity)getActivity()).selectIndex(1); 
      break; 
    } 
}