Android - Start Fragemnt from another Fragment C#

后端 未结 3 1184
长情又很酷
长情又很酷 2021-01-28 00:20

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

相关标签:
3条回答
  • 2021-01-28 01:14

    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;
    }
    
    0 讨论(0)
  • 2021-01-28 01:17

    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.

    0 讨论(0)
  • 2021-01-28 01:18

    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;
    }
    
    0 讨论(0)
提交回复
热议问题