2014-02-03 2 views
1

Я создал приложение с viewPager и фрагментом. Я хочу, чтобы, если приложение имеет 3 фрагмента, они передаются от 3 до 1 и от 1 до 3. Я читал много сообщений, но мне не удалось сделать это в моем приложении. Как я мог это сделать? Я поместил свой код. Спасибо.Android: ViewPager от последней до первой страницы

MyFragment.java

public class MyFragment extends Fragment { 

public static final String EXTRA_MESSAGE = "EXTRA_MESSAGE"; 

public static final MyFragment newInstance(String message) 
{ 
    MyFragment f = new MyFragment(); 
    Bundle bdl = new Bundle(1); 
    bdl.putString(EXTRA_MESSAGE, message); 
    f.setArguments(bdl); 

    return f; 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 

    Bundle savedInstanceState) { 

    String message = getArguments().getString(EXTRA_MESSAGE); 
    View v = inflater.inflate(R.layout.myfragment_layout, container, false); 
    TextView messageTextView = (TextView)v.findViewById(R.id.textView1); 
    messageTextView.setText(message); 

    cargar(v); 

    return v; 
} 

public void cargar(View v) { 


    final TabHost tabs; 

    tabs=(TabHost)v.findViewById(android.R.id.tabhost); 

    tabs.setup(); 

    RelativeLayout.LayoutParams rllp = new RelativeLayout.LayoutParams 
      (ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); 
    rllp.addRule(RelativeLayout.CENTER_IN_PARENT); 

    TabHost.TabSpec spec = tabs.newTabSpec("mitab1"); 
    spec.setContent(R.id.tab1); 
    spec.setIndicator("TAB 1"); 
    tabs.addTab(spec); 

    spec = tabs.newTabSpec("mitab2"); 
    spec.setContent(R.id.tab2); 
    spec.setIndicator("TAB 2"); 
    tabs.addTab(spec); 

    tabs.setCurrentTab(0); 

    tabs.getTabWidget().getChildAt(0).findViewById(android.R.id.title).setLayoutParams(rllp); 
    tabs.getTabWidget().getChildAt(1).findViewById(android.R.id.title).setLayoutParams(rllp); 

    TabWidget tw = (TabWidget)tabs.findViewById(android.R.id.tabs); 
    View tabView = tw.getChildTabViewAt(0); 
    final TextView tv = (TextView)tabView.findViewById(android.R.id.title); 
    tv.setTextSize(16); 
    tv.setTypeface(null, Typeface.BOLD); 

    View tabView2 = tw.getChildTabViewAt(1); 
    final TextView tv2 = (TextView)tabView2.findViewById(android.R.id.title); 
    tv2.setTextSize(16); 
    tv2.setTypeface(null, Typeface.BOLD); 

    tabs.setOnTabChangedListener(new OnTabChangeListener() { 
     @Override 
     public void onTabChanged(String tabId) { 

      if(tabId.equals("mitab1")) { 


      } else { 


      } 
     } 
    }); 


} 

} 

pageViewActivity.java

public class PageViewActivity extends FragmentActivity { 

MyPageAdapter pageAdapter; 

ViewPager pager; 

private int previousState, currentState; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_page_view); 

    List<Fragment> fragments = getFragments(); 

    pageAdapter = new MyPageAdapter(getSupportFragmentManager(), fragments); 

    pager = (ViewPager)findViewById(R.id.viewpager); 
    pager.setAdapter(pageAdapter); 
} 

public void onPageScrollStateChanged(int state) {    

    int currentPage = pager.getCurrentItem();  //ViewPager Type 

    if (currentPage == 3 || currentPage == 0){ 
     previousState = currentState; 
     currentState = state; 
     if (previousState == 1 && currentState == 0){ 

      pager.setCurrentItem(currentPage == 0 ? 3 : 0); 

     } 
    } 
} 

private List<Fragment> getFragments(){ 
    List<Fragment> fList = new ArrayList<Fragment>(); 

    for(int i=0;i<3;i++) { 
     fList.add(MyFragment.newInstance("Monumento " + (i+1))); 
    } 
    return fList; 
} 

private class MyPageAdapter extends FragmentPagerAdapter { 
    private List<Fragment> fragments; 

    public MyPageAdapter(FragmentManager fm, List<Fragment> fragments) { 
     super(fm); 
     this.fragments = fragments; 
    } 
    @Override 
    public Fragment getItem(int position) { 
     return this.fragments.get(position); 
    } 

    @Override 
    public int getCount() { 
     return this.fragments.size(); 
    } 
} 
} 
+0

где ваш код? –

+0

Прошу прощения. код уже там – user3231711

ответ

1

Вы можете установить текущую страницу с помощью функции pager.setCurrentItem(num). Я думаю, это может быть полезно и в вашем случае. pager.getCurrentItem() Функция используется для получения текущей страницы.

+0

да, с этим кодом мое приложение работает нормально – user3231711

+0

С удовольствием слышу :) –

1

для этого вам нужно взять 2 фрагментов фиктивных и в onpagechangelistner вам нужно определить, если количество страниц составляет 4, то просто назвал setcurrentpage равным 1 для 1 - 3, посмотрите этот код

public class MyPageChangeListener implements OnPageChangeListener { 
     @SuppressWarnings("static-access") 
     @Override 
     public void onPageScrollStateChanged(int state) { 

     } 

     @Override 
     public void onPageScrolled(int position, float positionOffset, 
       int positionOffsetPixel) { 
     } 

     @Override 
     public void onPageSelected(int arg0) { 

     if (viewPager.getCurrentItem() == 4) { 
      viewPager.setCurrentItem(1, false); 
     } 
      if (viewPager.getCurrentItem() == 0) { 
      viewPager.setCurrentItem(3, false); // false will prevent sliding      animation of view pager 
     } 
     } 
    } 
+0

реализовал этот код в моем приложении и не так ли? – user3231711

+0

просто вызовите viewpager.setonpagechangelistner (новый MyPageChangeListener()); например, для установки pagechange listner –

+0

это не работает нормально. он не меняется нормально. только от 2 до 3, оставшихся до – user3231711

Смежные вопросы