I know this question has been asked too much here but i ahve tried every solution out there to open a fragment from another fragment and no one worked for me.
Fr
You can use the events instead:
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
View view = inflater.Inflate(Resource.Layout.my_layout, container, false);
Button add = view.FindViewById<Button>(Resource.Id.addbtn);
add.Click += (object sender, EventArgs e) =>
{
Fragment2 fragment2 = new Fragment2();
FragmentTransaction ft = FragmentManager.BeginTransaction();
ft.Replace(Resource.Id.content_frame, fragment2);
ft.Commit();
};
return view;
}
You need a FrameLayout
to contain your LinearLayout
:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/content_frame">
<LinearLayout
android:id="@+id/ll"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:text="Text"
android:layout_width="match_parent"
android:layout_height="70dp"
android:id="@+id/total"
android:textAlignment="center"
android:textSize="30dp" />
<TextView
android:text="Text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textchangevalue"
android:textSize="33dip"
android:textStyle="bold" />
<Button
android:text="UPDATE"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/updatebtn" />
<Button
android:text="ADD"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/addbtn" />
<ListView
android:minWidth="25px"
android:minHeight="25px"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/portfoliolist"
android:clickable="true" />
</LinearLayout>
</FrameLayout>
And your code should be :
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
// Use this to return your custom view for this Fragment
var view = inflater.Inflate(Resource.Layout.my_layout, container, false);
var ll = view.FindViewById<LinearLayout>(Resource.Id.ll);
var bt = view.FindViewById(Resource.Id.addbtn);
bt.Click+= delegate
{
Fragment2 fragment2 = new Fragment2();
FragmentTransaction ft = FragmentManager.BeginTransaction();
ft.Replace(Resource.Id.content_frame, fragment2);
ft.Commit();
ll.Visibility = ViewStates.Gone;
};
return view;
}
You can refer to this to see why your fragment2
just top on it. I use ll.Visibility = ViewStates.Gone;
to avoid it.
You have to attach your Click
event to your button before return
the view
, and I think that you want to attach this event on your addbtn
so you have to create the variable add
before to attach this event
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
View view = inflater.Inflate(Resource.Layout.my_layout, container, false);
Button add = view.FindViewById<Button>(Resource.Id.addbtn);
add.Click += delegate
{
Fragment2 fragment2 = new Fragment2();
FragmentTransaction ft = FragmentManager.BeginTransaction();
ft.Replace(Resource.Id.content_frame, fragment2);
ft.Commit();
};
return view;
}