moumenShobakey
moumenShobakey

Reputation: 426

I can't use transaction.replace

I am trying to replace the content of frame_layout with a view of fragment. I used to do that by just using transaction.replace but it just put the view on the top of the main content.

Here is the code:

That's where I replace the frame_layout whose ID is contain:

    VideosFragment videosFragment = new VideosFragment();
                                        Bundle bundle = new Bundle();
                                        bundle.putCharSequence("Character", view.getContentDescription());
                                        videosFragment.setArguments(bundle);


                                        FragmentTransaction transaction = fragmentManager.beginTransaction();
                                        transaction.replace(R.id.contain , videosFragment).addToBackStack(null).commit();

here is the xml of main_Activity

   <?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.shobakyDC.muchannel.MainActivity">
<FrameLayout
    android:id ="@+id/contain"
    android:layout_width="match_parent"
    android:background="@drawable/islamic_green"
    android:layout_height="match_parent">


    <ProgressBar
        android:id="@+id/progressBar2"
        style="?android:attr/progressBarStyle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center" />

    <GridView
        android:id="@+id/gridview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:horizontalSpacing="10dp"
        android:numColumns="2"
        android:paddingStart="50dp"
        android:paddingTop="10dp"
        android:verticalSpacing="10dp"
        android:paddingRight="0dp"
        android:paddingLeft="50dp"
        android:paddingEnd="0dp">

    </GridView>


</FrameLayout>

<android.support.design.widget.NavigationView
    android:id="@+id/Navigator"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    app:headerLayout="@layout/header"
    android:layout_gravity="start"
    android:background="@android:color/white"
    app:itemTextColor="@color/navcolor"
    app:itemIconTint="@color/navcolor"
    app:menu="@menu/navigationmenu">
</android.support.design.widget.NavigationView>

the video_fragment:

    public class VideosFragment extends Fragment {

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.videofragment_layout , container , false);
    Bundle args = getArguments();
    TextView textView = view.findViewById(R.id.textView);
    textView.setText(args.getString("Character"));
    return view;
}
  }

Upvotes: 0

Views: 74

Answers (1)

Zubaria Ashraf
Zubaria Ashraf

Reputation: 85

In xml of Main Activity, you have to make an empty FrameLayout with an ID like this:

<FrameLayout
    android:id ="@+id/contain"
    android:layout_width="match_parent"
    android:background="@drawable/islamic_green"
    android:layout_height="match_parent">
</FrameLayout>

and then make a separate xml layout for this fragment. Now you have to replace this fragment layout with frame layout in Main Activity.

Upvotes: 2

Related Questions