How to send data from fragment to fragment within same fragment activity?

后端 未结 1 1402
花落未央
花落未央 2020-12-21 12:18

I have a container in which there are two fragments my 1st fragment is working good now I want to send it to 2nd fragment. This is my 1st Fragment

private cl         


        
相关标签:
1条回答
  • 2020-12-21 12:50

    First communicate to the activity that hosts the fragment1 using a interface as a callback. Then you can communicate to fragment2.

    You find more info and code snippets @

    http://developer.android.com/training/basics/fragments/communicating.html

    Example :

    FragmentOne ---> MainActivity ---> FramentTwo

    MainActivity implements the interface ReturnData and overrides senData

    public class MainActivity extends Activity implements ReturnData{
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            FragmentOne newFragment = new FragmentOne();
            FragmentTransaction transaction = getFragmentManager().beginTransaction();
            transaction.replace(R.id.container, newFragment);
            transaction.addToBackStack(null);
            transaction.commit();
    
        }
    
        @Override
        public void sendData(String result) {
            // TODO Auto-generated method stub
            FragmentTwo newFragment = new FragmentTwo();
            Bundle args = new Bundle();
            args.putString("key",result);
            newFragment.setArguments(args);
            FragmentTransaction transaction = getFragmentManager().beginTransaction();
            transaction.replace(R.id.container, newFragment);
            transaction.addToBackStack(null);
            transaction.commit();
    
        }
    
    }
    

    activity_main.xml

    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:id="@+id/container"
        android:layout_height="fill_parent" >
    
    </FrameLayout>
    

    The layout has a FrameLayout which is a view group to which you add/replace framgents

    FragmentOne.java

    FragmentOne uses interface as a callback to the activity to communicate value.

    public class FragmentOne extends Fragment {
    
        public interface ReturnData
        {
            public void sendData(String result);
        }
    
        ReturnData mCallback;
         @Override
            public void onAttach(Activity activity) {
                super.onAttach(activity);
    
                // This makes sure that the container activity has implemented
                // the callback interface. If not, it throws an exception
                try {
                    mCallback = (ReturnData) activity;
                } catch (ClassCastException e) {
                    throw new ClassCastException(activity.toString()
                            + " must implement ReturnData");
                }
            }
        TextView tv2;
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.frag1,container,false);
            tv2 = (TextView) rootView.findViewById(R.id.textView2);
            Button b= (Button) rootView.findViewById(R.id.button1);
            b.setOnClickListener(new OnClickListener()
            {
    
                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    mCallback.sendData(tv2.getText().toString());
                }
    
            });
            return rootView;
        }   
    }
    

    frag1.xml

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    
        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_centerHorizontal="true"
            android:layout_marginBottom="88dp"
            android:text="Button" />
    
        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="46dp"
            android:text="This is Fragment One" />
    
        <TextView
            android:id="@+id/textView2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/textView1"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="82dp"
            android:text="Hello is communicated to Fragment Two on Button Click" />
    
    </RelativeLayout>
    

    FragmentTwo

    public class FragmentTwo extends Fragment {
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.frag2,container,false);
            TextView tv1 = (TextView) rootView.findViewById(R.id.textView1);
            String text = getArguments().getString("key");
            tv1.append(text);
            return rootView;
        }   
    }
    

    frag2.xml

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    
        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="36dp"
            android:text="Display : " />
    
    </RelativeLayout>
    

    Snaps

    enter image description here

    enter image description here

    0 讨论(0)
提交回复
热议问题