android - Replace one fragment with an another fragment -
i want replace old fragment
new fragment
, still buttons of old fragment
still visible in new fragment.
fragmenttransaction transaction = getfragmentmanager().begintransaction(); fragment newfragment = genericmood.newinstance("a","b"); // replace whatever in fragment_container view fragment, // , add transaction stack if needed transaction.replace(r.id.allmoods, newfragment); transaction.addtobackstack(null); transaction.commitallowingstateloss();
i can replace old fragment
new one, buttons r.id.allmoods fragment
still visible on top of new fragment
.
i tried given below code.
fragmenttransaction transaction = getfragmentmanager().begintransaction(); fragment newfragment = genericmood.newinstance("a","b"); // replace whatever in fragment_container view fragment, // , add transaction stack if needed transaction.replace(((viewgroup)getview().getparent()).getid(), newfragment); transaction.addtobackstack(null); transaction.commitallowingstateloss();
xml files:
<relativelayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/allmoods" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/colorprimary" tools:context="com.moodoff.moods"> <button android:text="button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margintop="64dp" android:id="@+id/btn_btn" android:height="80dp" android:width="100dp" android:onclick="putmeoff" android:layout_marginleft="17dp" android:layout_marginstart="17dp"/> </relativelayout>
this fragment supposed replace above:
<framelayout 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:layout_width="match_parent" android:id="@+id/genericmood" android:layout_height="match_parent" android:background="@color/colorprimary" tools:context="com.moodoff.genericmood"> <!-- todo: update blank fragment layout --> <relativelayout android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#000000" android:layout_gravity="fill_horizontal" android:id="@+id/floatingbuttons" > <android.support.design.widget.floatingactionbutton android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margintop="1dp" android:layout_marginright="14dp" app:backgroundtint="#ffffff" android:layout_alignparenttop="true" android:layout_alignparentright="true" android:layout_alignparentend="true" android:src="@drawable/cameraicon" android:id="@+id/btn_camera" app:fabsize="mini" /> </relativelayout> </framelayout>
both doesn't work. do? update: after replacing proper container buttons had gone new fragment not getting instantiated properly. gets pure blank white screen.
my activity_alltabs.xml looks this: <?xml version="1.0" encoding="utf-8"?> <android.support.design.widget.coordinatorlayout 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/main_content" android:layout_width="match_parent" android:layout_height="match_parent" android:fitssystemwindows="true" tools:context="com.moodoff.alltabs"> <android.support.design.widget.appbarlayout android:id="@+id/appbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:theme="@style/apptheme.appbaroverlay"> <android.support.design.widget.tablayout android:id="@+id/tabs" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@android:color/background_dark" /> </android.support.design.widget.appbarlayout> <android.support.v4.view.viewpager android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior" /> </android.support.design.widget.coordinatorlayout>
i have worked on fragments before , hope out , give better understanding of flow. firstly, mainactivity.xml
file :
<?xml version="1.0" encoding="utf-8"?> <relativelayout 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:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior" tools:context="com.example.activity.homeactivity"> //this framelayout contain fragments view. <framelayout android:id="@+id/container_view" android:layout_width="match_parent" android:layout_height="match_parent"> </framelayout> </relativelayout>
next, create 2 fragments , xml mentioned below : fragment1.xml
<relativelayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:clickable="true" // important have tools:context=".fragments.frament1"> <button android:id="@+id/btn" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="bottom"/> </relativelayout>
the next fragment same mentioned above. here fragment1.class
:
public class fragment1 extends fragment implements view.onclicklistener { button btn; public fragment1() { // required empty public constructor } @override public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) { view view = inflater.inflate(r.layout.fragment1, container, false); view.setbackgroundcolor(color.white); //perform required conditions , return view button = (button) view.findviewbyid(r.id.btn); button.setonclicklistener(this); return view; } public void onclick(view v) { switch(v.getid()) { case r.id.btn: //replace current fragment on button click fragment fragment2= new fragment2(); getfragmentmanager().begintransaction(). replace(r.id.container_view, fragment2). addtobackstack("frags").commit(); break; } } }
and fragment2 follows :
public class fragment2 extends fragment{ string tag = "fragment2"; public fragment2() { // required empty public constructor } @override public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) { view view = inflater.inflate(r.layout.fragment2,container,false); view.setbackgroundcolor(color.white); return view; } }
as mentioned earlier, xml file same fragment1.xml
. more important here main activity contain layout take fragments view when ever user switches fragments. hence use replace method replace previous view fragments view specified us.
Comments
Post a Comment