2014-02-06 2 views
1

Я попытался несколько раз добавить два фрагмента в вкладку «Одно действие». Когда я нажимаю вкладку действий «Поиск», я хочу загрузить один фрагмент, когда i проведите по экрану, он перейдет во второй фрагмент в разделе «Действие». Найдите ниже код, который я использовал.Изменение нескольких фрагментов из ONE ActionTab

MainActivity.java

package com.example.swipetabs; 
import com.tabs.*; 
import android.os.Bundle; 
import android.app.ActionBar; 
import android.app.ActionBar.Tab; 
import android.app.ActionBar.TabListener; 
import android.app.Activity; 
import android.app.FragmentTransaction; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentPagerAdapter; 
import android.support.v4.view.ViewPager; 
import android.view.Menu; 
import android.widget.ImageView; 
import com.comparenow.*; 

public class MainActivity extends FragmentActivity implements TabListener { 

    ActionBar action_bar; 
    ViewPager viewPager; 
    ImageView creditCards; 
    Fragment fragement; 
    Fragment fragement1; 
    Fragment fragement2; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     viewPager=(ViewPager)findViewById(R.id.pager); 


     viewPager.setAdapter(new MyAdoptor(getSupportFragmentManager())); 
     viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { 

      @Override 
      public void onPageSelected(int arg0) { 
       // TODO Auto-generated method stub 
       action_bar.setSelectedNavigationItem(arg0); 

      } 

      @Override 
      public void onPageScrolled(int arg0, float arg1, int arg2) { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      public void onPageScrollStateChanged(int arg0) { 
       // TODO Auto-generated method stub 

      } 
     }); 

     action_bar=getActionBar(); 
     //action_bar.setBackgroundDrawable(d) 
     action_bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

     ActionBar.Tab tab1=action_bar.newTab(); 
     tab1.setText("Login"); 

     tab1.setTabListener(this); 

     ActionBar.Tab tab2=action_bar.newTab(); 
     tab2.setText("Compare Now"); 
     tab2.setTabListener(this); 

     ActionBar.Tab tab3=action_bar.newTab(); 
     tab3.setText("Search"); 
     tab3.setTabListener(this); 

     action_bar.addTab(tab1); 
     action_bar.addTab(tab2); 
     action_bar.addTab(tab3); 

    } 

    public void switchToFragmentB(){ 
     viewPager.setCurrentItem(4); 
    } 

    @Override 
    public void onTabReselected(Tab arg0, FragmentTransaction arg1) { 
     // TODO Auto-generated method stub 


    } 

    @Override 
    public void onTabSelected(Tab tab, FragmentTransaction ft) { 
     // TODO Auto-generated method stub 
     //this is the code 
     viewPager.setCurrentItem(tab.getPosition()); 

     String name=(String)tab.getText().toString(); 

     // compare it to the tab you would like to do something with   
     if (name == "Search") { 
      //load the 1st fragment 
      fragement1= new CreditCards(); 
      getFragmentManager().beginTransaction() 
        .setCustomAnimations(android.R.animator.fade_in, 
          android.R.animator.fade_out) 
        .replace(R.id.store_fragment_container, fragment).commit(); 

      //load the 2nd fragment 
      fragement2 = new Loginfrag(); 
      getFragmentManager().beginTransaction() 
        .setCustomAnimations(android.R.animator.fade_in, 
          android.R.animator.fade_out) 
        .replace(R.id.imageView1,fragement2).commit(); 

    } 

    @Override 
    public void onTabUnselected(Tab tab, FragmentTransaction ft) { 
     // TODO Auto-generated method stub 

    } 


} 


class MyAdoptor extends FragmentPagerAdapter 
{ 

    public MyAdoptor(FragmentManager fm) { 
     super(fm); 
       // TODO Auto-generated constructor stub 
    } 

    @Override 
    public Fragment getItem(int arg0) { 
     // TODO Auto-generated method stub 

     Fragment fragement=null; 
     if(arg0==0) 
     { 
      fragement=new Loginfrag(); 
     } 
     if(arg0==1) 
     { 
      fragement=new Comparefrag(); 
     } 
     if(arg0==2) 
     { 
      fragement=new Searchfrag(); 
     } 



     System.out.print("<><><><>"); 
     return fragement; 

    } 

    @Override 
    public int getCount() { 
     // TODO Auto-generated method stub 
     return 3; 
    } 

} 

CreditCards.java (фрагмент)/Loginfrag .java (Fragement) оба же его есть corresponsing XML файлы.

package com.comparenow; 

import com.example.swipetabs.R; 
import com.example.swipetabs.R.layout; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 

public class CreditCards extends Fragment { 

    public CreditCards() { 
     // Required empty public constructor 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     return inflater.inflate(R.layout.creditcards_c, container, false); 
    } 

у меня есть проблемы с сегментом ниже кода, им не уверен, что его параметры.

fragement1= new CreditCards(); 
      getFragmentManager().beginTransaction() 
        .setCustomAnimations(android.R.animator.fade_in, 
          android.R.animator.fade_out) 
        .replace(R.id.store_fragment_container, fragment).commit(); 

      //load the 2nd fragment 
      fragement2 = new Loginfrag(); 
      getFragmentManager().beginTransaction() 
        .setCustomAnimations(android.R.animator.fade_in, 
          android.R.animator.fade_out) 
        .replace(R.id.imageView1,fragement2).commit(); 

    } 
+0

Думаю, вам нужно называть следующий фрагмент после первой 1-й финишной анимации поэтому нужно добавить прослушиватель анимации - см. эту ссылку - http://stackoverflow.com/questions/11120372/performing-action-after-fragment-transaction-animation-is-finished – Neha

+0

@Neha im только заботится о том, чтобы изменить fragements под одним действием Вкладка – VenushkaT

+0

И если вы изменяете несколько фрагментов под одной вкладкой действий, с которой стоит проблема u? – Neha

ответ

1

В общем, я считаю, что вы ищете, чтобы создать ViewPager в пределах Fragment в ViewPager.

Ваш MainActivity -образный, но стоит забыть обо всем, что есть внизу viewPager.setCurrentItem(tab.getPosition()) в onTabSelected(). Вместо того, чтобы использовать Searchfrag в вашем методе getItem() вашего пейджера, вам нужно будет создать и использовать родителя Fragment для обоих Searchfrag и любых других Fragment, которые вы хотите прокрутить на вкладке Поиск. Это Fragment может быть очень простым и содержать только ViewPager и адаптер пейджера. В этом родительском адаптере пейджера вы напишете способ getItem() для возврата Searchfrag для элемента 0 и любого другого фрагмента, который вы хотите прокрутить для элемента 1. Оба эти будут выглядеть так, как будто они находятся на вкладке «Поиск».

Например, FragmentPagerAdapter, который будет содержать Searchfrag и другой Fragment должен иметь getItem() метод, как следующее:

public static class SampleFragmentAdapter extends FragmentPagerAdapter { 

    public SampleFragmentAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public Fragment getItem(int arg0) { 
     if(arg0 == 0){ 
      return new Searchfrag(); 
     } else { 
      return new OtherFragmentUnderSearchTab(); 
     } 

    } 

    @Override 
    public int getCount() { 
     return 2; 
    } 

} 

Этот родитель Fragment (давайте назовем его ParentFragment) следует заменить Searchfrag в getItem() методом MyAdoptor примерно так:

@Override 
public Fragment getItem(int arg0) { 
    // TODO Auto-generated method stub 

    Fragment fragement=null; 
    if(arg0==0) 
    { 
     fragement=new Loginfrag(); 
    } 
    if(arg0==1) 
    { 
     fragement=new Comparefrag(); 
    } 
    if(arg0==2) 
    { 
     fragement=new ParentFragment(); 
    } 



    System.out.print("<><><><>"); 
    return fragement; 

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