6

Я хочу заменить фрагмент на другой фрагмент, который содержит TabLayout Viewpager. как это:Как заменить фрагмент на другой фрагмент в TabLayout и ViewPager

активность ->Отрывок ->Б Фрагмент (TabLayout ViewPager) ->C Фрагмент (Фрагмент вкладки) ->D Фрагмент

I задача - это переключатель Фрагмент C до Фрагмент D.

Примечание: - TabLayout ViewPager также содержит 3 вкладки Управление фрагментами на FragmentPagerAdapter.

макет

Tablayout фрагмента:

<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> 

Фрагмент B класс:

@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; 
} 

Фрагмент C Класс:

@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, "********************"); 
} 


Я получаю е 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) 

Я пробовал много тика и раствора, но не ударил меня.
Пожалуйста, помогите мне решить эту проблему.

+0

Насколько я понимаю, вы пытаетесь создать вложенная компоновка табуляции. –

+0

@Gaurav Balbhadra может сказать ...... на самом деле я хочу изменить фрагмент Tab (который содержит фрагмент TabLayout) с другим фрагментом. –

+0

проверить это, это может помочь вам http://stackoverflow.com/questions/34261057/android-how-to-build-multiplelevel-tabs/34262629#34262629 –

ответ

0

Вы пробовали?

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

этот код в фрагменте А ...... да! Я сделал это –

+0

, но не ударил ..... :( –

+1

Привет, Garg. Поскольку мы используем компоновку вкладок с пейджером представления, в файле Activity xml нет рамки фрейма. Если вы закончите с этим, можете ли вы объясните идентификатор main_container? – sarankumar

0

, и я думаю, что ошибка была совершенно очевидна. Компиляции говорит:

not view found for container_body 

И в вашем коде:

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, "********************"); 

}

Я вижу, что вы пытаетесь использовать fragmentTransaction.replace (R.id.container_body, фрагмент); Однако вы просто комментируете container_body в своем макете. Вот почему компилятор сказал вам, что он не может найти container_body для разрастания фрагмента. Может, в этом проблема?

Также это должно быть полезно, если вы могли бы разместить более подробную информацию о макете для фрагмента Д.

Позвольте мне знать, если это решить вашу проблему;)

+0

дорогой, что код комментировал. Компонент b'coz framelayout не подходит в этой позиции, это вызывает одно другое исключение ...... thats - это мой фактический вопрос «Как заменить фрагмент в фрагменте tablayout». –

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