6

Tôi muốn thay thế phân đoạn thành một đoạn khác có chứa TabLayout Viewpager. như thế này:Làm thế nào để thay thế phân đoạn thành một đoạn khác trong TabLayout và ViewPager

Hoạt động ->Một Fragment ->B Fragment (TabLayout ViewPager) ->C Fragment (Tab của Fragment) ->D Fragment

Nhiệm vụ của tôi là chuyển đổi Phân đoạn C thành Mảnh D.

Lưu ý: - TabLayout ViewPager cũng chứa 3 tab Kiểm soát phân đoạn theo FragmentPagerAdapter.

bố trí

Tablayout đoạn của:

<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 lớp:

@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 lớp:

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


tôi nhận được một 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) 

Tôi đã thử nhiều đánh dấu và giải pháp nhưng không ảnh hưởng đến tôi.
Hãy giúp tôi giải quyết vấn đề này.

+0

Theo như tôi hiểu, bạn đang cố gắng để tạo ra bố cục tab lồng nhau. –

+0

@Gaurav Balbhadra có thể nói ...... thực sự tôi muốn thay đổi đoạn Tab (có chứa đoạn của TabLayout) với một đoạn khác. –

+0

kiểm tra điều này có thể giúp bạn http://stackoverflow.com/questions/34261057/android-how-to-build-multiplelevel-tabs/34262629#34262629 –

Trả lời

0

Bạn đã thử chưa?

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

mã được mã hóa này trong mảnh A …… yeah! Tôi đã thực hiện nó –

+0

nhưng không có hit ..... :( –

+1

Xin chào Garg, Vì chúng tôi đang sử dụng bố cục tab với máy nhắn tin chế độ xem, không có bố cục khung trong tệp xml Hoạt động. Nếu bạn làm xong, bạn có thể giải thích các id main_container? – sarankumar

0

và tôi nghĩ lỗi này khá rõ ràng. Các biên dịch nói:

not view found for container_body 

Và trong mã của bạn:

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

}

Tôi thấy rằng bạn cố gắng sử dụng fragmentTransaction.replace (R.id.container_body, đoạn); Tuy nhiên, bạn chỉ cần chú thích containers_body trong bố cục của mình. Đó là lý do tại sao trình biên dịch cho bạn biết rằng nó không thể tìm thấy containers_body để phân đoạn tăng thêm. Có lẽ đó là vấn đề?

Ngoài ra nó sẽ hữu ích nếu bạn có thể gửi thêm chi tiết về cách bố trí của bạn cho đoạn D.

Hãy cho tôi biết nếu điều này giải quyết vấn đề của bạn;)

+0

thân yêu mà mã nhận xét b'coz framelayout thành phần không phù hợp ở vị trí này nó gây ra một ngoại lệ khác ...... thats là câu hỏi thực tế của tôi "làm thế nào để thay thế fragment trong mảnh của tablayout". –

Các vấn đề liên quan