6

Chcę zamienić fragment na inny fragment, który zawiera tabulator View View TabLayout. tak:Jak zamienić fragment na inny fragment TabLayout i ViewPager

aktywny ->Fragment ->B Fragment (TabLayout ViewPager) ->C fragment (Tab fragment) ->D fragment

I zadanie to przełącznik Fragment C do Fragment D.

Uwaga: - TabLayout ViewPager zawiera również 3 zakładki Kontrola fragmentów przez FragmentPagerAdapter.

układ

Tablayout fragment za:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:orientation="vertical" > 

<android.support.design.widget.TabLayout 
    android:id="@+id/tablayout_postpaid_service" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="@color/colorPrimary" 
    app:tabGravity="fill" 
    app:tabIndicatorColor="@color/white" 
    app:tabMode="scrollable" 
    app:tabSelectedTextColor="@color/white" 
    app:tabTextColor="@color/tab_fade_text_color" > 
</android.support.design.widget.TabLayout> 

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

    <!-- <FrameLayout 
     android:id="@+id/container_body" 
     android:layout_width="fill_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1" /> --> 
</android.support.v4.view.ViewPager> 

Fragment B klasa:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    view = inflater.inflate(R.layout.fragment_select_postpaid_service, container, false); 

    tablayout = (TabLayout) view.findViewById(R.id.tablayout_postpaid_service); 
    viewpager = (ViewPager) view.findViewById(R.id.viewpager_postpaid_service); 
    viewpager.setAdapter(new TabPagerAdapter(getChildFragmentManager(), TabConstants.POSTPAID_SERVICE_TYPE_TABS_FLAG, TabConstants.POSTPAID_SERVICE_TYPE_TABS)); 


    tablayout.post(new Runnable() { 

     @Override 
     public void run() { 
      tablayout.setupWithViewPager(viewpager); 
      setupTabIcons(); 
     } 
    }); 
    return view; 
} 

Fragment C klasa:

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

    view = inflater.inflate(R.layout.fragment_select_operator, container, 
      false); 
    setGridview(); 
    return view; 
} 
private void setGridview() { 

    operatorName = new ArrayList<String>(); 
    operatorCode = new ArrayList<String>(); 

    recyclerview = (RecyclerView) view 
      .findViewById(R.id.select_operator_recycler_view); 
    recyclerview.setHasFixedSize(true); 
    GridLayoutManager layoutManager = new GridLayoutManager(getActivity(), 
      Constants.NO_OF_OPERATOR_GRID); 
    recyclerview.setLayoutManager(layoutManager); 
    OperatorGridAdapter adapter = new OperatorGridAdapter(getActivity(), 
      HomeConstants.OPERATOR_LIST_ICON); 
    recyclerview.setAdapter(adapter); 
    recyclerview.addOnItemTouchListener(new RecyclerItemClickListener(
      getActivity(), 
      new RecyclerItemClickListener.OnItemClickListener() { 

       @Override 
       public void onItemClick(View view, int position) { 
        navigateFragment(position); 
       } 

      })); 
} 
private void navigateFragment(int position) { 

    Fragment fragment = new DFragment(); 

    // FragmentTransaction fragmentTransaction = getChildFragmentManager().beginTransaction(); 
    FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); 
    fragmentTransaction.replace(R.id.container_body, fragment); 
    //fragmentTransaction.addToBackStack(null); 

    fragmentTransaction.commit(); 
    ((AppCompatActivity) getActivity()).getSupportActionBar().setTitle(
      getResources().getString(R.string.app_name)); 
    Log.d(Constants.ACTIVITY_TAG, "********************"); 
} 


otrzymuję e rror

java.lang.IllegalArgumentException: No view found for id 0x7f0a006e (com.recharge:id/container_body) for fragment DFragment{4327cfd0 #2 id=0x7f0a006e} 
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1070) 
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1259) 
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:738) 
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1624) 
at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:517) 

Próbowałem wielu kleszczy i rozwiązań, ale nie trafiłem dla mnie.
Pomóż mi rozwiązać ten problem.

+0

O ile mi zrozumieć, staramy się tworzyć zagnieżdżony układ kart. –

+0

@Gaurav Balbhadra może powiedzieć ...... faktycznie chcę zmienić fragment Tab (zawierający fragment TabLayouta) z innym fragmentem. –

+0

Sprawdź to może pomóc http://stackoverflow.com/questions/34261057/android-how-to-build-multiplelevel-tabs/34262629#34262629 –

Odpowiedz

0

Czy próbowałeś?

FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
fragmentTransaction.replace(R.id.main_container, new FragmentB()).commit(); 
+0

ten kodowany w fragmencie A ...... tak! Zrobiłem to –

+0

ale bez trafienia ..... :( –

+1

Hello Garg's, Ponieważ używamy układu tabulacji z pageriem widoku, nie ma układu ramek w pliku Activity xml. Jeśli skończysz, możesz wyjaśnić identyfikator main_container? – sarankumar

0

i uważam, że błąd był dość oczywisty. Kompilacji mówi:

not view found for container_body 

I w kodzie:

private void navigateFragment(int position) { 

Fragment fragment = new DFragment(); 

// FragmentTransaction fragmentTransaction = getChildFragmentManager().beginTransaction(); 
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); 
fragmentTransaction.replace(R.id.container_body, fragment); 
//fragmentTransaction.addToBackStack(null); 

fragmentTransaction.commit(); 
((AppCompatActivity) getActivity()).getSupportActionBar().setTitle(
     getResources().getString(R.string.app_name)); 
Log.d(Constants.ACTIVITY_TAG, "********************"); 

}

widzę, że próby korzystania fragmentTransaction.replace (R.id.container_body, fragment); Jednak po prostu komentujesz container_body w swoim układzie. Dlatego kompilacja powiedziała ci, że nie może znaleźć container_body w celu nadmuchania fragmentu. Może to jest problem?

także powinny być pomocne, jeśli można dodawać więcej szczegółów o układzie dla fragmentu D.

Daj mi znać, czy to rozwiąże problem;)

+0

kochany, że kod skomentował składnik b'coz framelayout nie jest odpowiedni na tym stanowisku, ponieważ powoduje jeden inny wyjątek ...... to jest moje aktualne pytanie "jak zamienić fragment w fragmencie tablayout". –

Powiązane problemy