2017-10-11 11 views
0

il y a un fragment dans mon activité dans laquelle il y a un viewpager qui a 5 fragments et dans l'activité principale que je dois obtenir un du fragment de viewpagerne peut pas trouver fragment de viewpager

Activité

public class MainActivity extends AppCompatActivity { 


    public void setFragment(){ 

    Handler handler = new Handler(); 
    handler.postDelayed(new Runnable() { 
     @Override 
     public void run() { 
    mainFragment= new MainFragment(); 
    FragmentTransaction fragmentTransaction =getSupportFragmentManager().beginTransaction(); 
    fragmentTransaction.replace(R.id.container, mainFragment,"mainFragment"); 

    fragmentTransaction.commitAllowingStateLoss(); 

     } 
    }, 250); 
    } 

    public void findFragment() { 

    mainFragment= (MainFragment) getSupportFragmentManager().findFragmentByTag("mainFragment"); 

    viewPager = mainFragment.viewPager; 
    FragmentOne fragment = (FragmentOne) getSupportFragmentManager().findFragmentByTag("android:switcher:" + R.id.viewPager + ":" + viewPager.getCurrentItem()); 


    } 

} 

MainFragment

public class MainFragment extends Fragment{ 


private void initViewPagerAndTabs() { 

    viewPager = view.findViewById(R.id.viewPager); 
    pagerAdapter = new PagerAdapter(getChildFragmentManager()); 

    pagerAdapter.addFragment(FragmentOne.newInstance(), "one"); 
    pagerAdapter.addFragment(FragmentTwo.newInstance(), "two"); 
    pagerAdapter.addFragment(FragmentThree.newInstance(), "three"); 
    pagerAdapter.addFragment(FragmentFour.newInstance(), "four"); 
    pagerAdapter.addFragment(FragmentFive.newInstance(), "five"); 

    viewPager.setAdapter(pagerAdapter); 
    TabLayout tabLayout = view.findViewById(R.id.tabLayout); 
    tabLayout.setupWithViewPager(viewPager); 
    viewPager.setCurrentItem(1); 
    viewPager.setOffscreenPageLimit(3); 
    } 

    private static class PagerAdapter extends FragmentPagerAdapter { 

    private final List<Fragment> fragmentList = new ArrayList<>(); 
    private final List<String> fragmentTitleList = new ArrayList<>(); 

    private PagerAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    public void addFragment(Fragment fragment, String title) { 
     fragmentList.add(fragment); 
     fragmentTitleList.add(title); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     return fragmentList.get(position); 
    } 

    @Override 
    public int getCount() { 
     return fragmentList.size(); 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     return fragmentTitleList.get(position); 
    } 

    } 


} 

si je l'utilise "getFragmentManager()" au lieu de "getChildFragmentManager()" il retourne le fragment, mais quand je l'utilise « getChildFragmentMa Nager() » dans viewPager retourne null l'activité

+0

donc le code ci-dessus fonctionne? et 'FragmentOne fragment = (FragmentOne) getSupportFragmentManager(). findFragmentByTag (" android: switcher: "+ R.id.viewPager +": "+ viewPager.getCurrentItem());' est un fragment qui se rétracte? – tamtom

+0

Oui, ça fonctionnait mais maintenant j'ai décidé d'ajouter quelques fonctionnalités et en faisant cela je devais changer getFragmentManager en getChildFragmentManager et maintenant il retourne null –

Répondre

0

Essayez ce code en cours pour 1 fragment, peut il vous aide dans votre code:

Activité principale

public class OpenQuran extends AppCompatActivity implements TabLayout.OnTabSelectedListener { 

TabLayout tabLayoutqaue; 
Pager mAdapter; 
MediaPlayer mp; 

//This is our viewPagerss 
ViewPager viewPager; 
View mWebView; 

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

    Toolbar mToolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(mToolbar); 
    getSupportActionBar().setTitle("Read Quran"); 
    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

    //Initializing the tablayout 
    tabLayoutqaue = (TabLayout) findViewById(R.id.tabLayoutqaue); 

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

    //Creating our pager adapter 
    mAdapter = new Pager(getSupportFragmentManager()); 

    // 1 Fragment 
    mAdapter .addFrag(new Quran(), "Quran"); 


    viewPager.setAdapter(mAdapter); 

    tabLayoutqaue.setupWithViewPager(viewPager); 


    tabLayoutqaue.setOnTabSelectedListener(this); 

} 

@Override 
public void onTabSelected(TabLayout.Tab tab) { 
    viewPager.setCurrentItem(tab.getPosition()); 
} 

@Override 
public void onTabUnselected(TabLayout.Tab tab) { 

} 

@Override 
public void onTabReselected(TabLayout.Tab tab) { 

} 

Classe de marché:

public class parahlist extends Fragment { 

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

    //Returning the layout file after inflating 
    //Change R.layout.tab1 in you classes 
    return inflater.inflate(R.layout.activity_parahlist, container, false);} 


public void onViewCreated(View view, Bundle savedInstanceState) { 
    super.onViewCreated(view, savedInstanceState); 

} 

} 

Voir Pager Classe:

public class Pager extends FragmentPagerAdapter { 

//integer to count number of tabs 
int tabCount; 
private final List<Fragment> mFragmentList = new ArrayList<>(); 
private final List<String> mFragmentTitleList = new ArrayList<>(); 

//Constructor to the class 
public Pager(FragmentManager fm) { 
    super(fm); 
    //Initializing tab count 
    this.tabCount= tabCount; 
} 

//Overriding method getItem 
@Override 
public Fragment getItem(int position) { 

    return mFragmentList.get(position); 

} 
@Override 
public int getCount() { 
    return mFragmentList.size(); 
} 

public void addFrag(Fragment Fragment, String title) { 
    mFragmentList.add(Fragment); 
    mFragmentTitleList.add(title); 
} 



@Override 
public CharSequence getPageTitle(int position) { 
    return mFragmentTitleList.get(position); 
} 

} 

maintenant Ce code de MainActivity, 2ème et 3ème Fragment est Voir classe Pager. Vous n'avez pas besoin de modifier ou de modifier votre classe View Pager. Il suffit de créer une classe Java et de coller ce code tel quel. Dans Activité principale la ligne: mAdapter .addFrag(new Quran(), "Quran"); ajoutant description et fragment. Vous pouvez ajouter votre propre fragment après "nouveau". Après cela, vous devez mettre un widget Tablayout en vous Xml comme suit:

<android.support.design.widget.TabLayout 
     android:id="@+id/tabLayoutqaue" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="@color/colorgreen" 
     android:minHeight="?attr/actionBarSize" 
     app:tabIndicatorColor="@color/colorback" 
     android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"/> 

Et Voir Pager comme:

<android.support.v4.view.ViewPager 
    android:id="@+id/pager" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:adjustViewBounds="true" 
    /> 

Vous pouvez faire face à une question concernant tablayout: Il suffit de mettre cette ligne dans votre gradle construire sous dépendances:

compile 'com.android.support:design:25.3.1' 

Selon votre version. par exemple, vous avez 25.0.1 puis la ligne sera:

compile 'com.android.support:design:25.0.1 

encore je ne suis pas ici pour vous en dire plus. Si vous avez un problème!

+0

apprécie ton aide mais je veux connaître la solution à mon problème et ne pas changer un tout code de lot :) –