How to transfer some data to another Fragment?

前端 未结 10 1925
说谎
说谎 2020-11-22 11:41

How to transfer some data to another Fragment likewise it was done with extras for intents?

相关标签:
10条回答
  • 2020-11-22 12:33
                First Fragment Sending String To Next Fragment
                public class MainActivity extends AppCompatActivity {
                        private Button Add;
                        private EditText edt;
                        FragmentManager fragmentManager;
                        FragClass1 fragClass1;
    
    
                        @Override
                        protected void onCreate(Bundle savedInstanceState) {
                            super.onCreate(savedInstanceState);
                            setContentView(R.layout.activity_main);
                            Add= (Button) findViewById(R.id.BtnNext);
                            edt= (EditText) findViewById(R.id.editText);
    
                            Add.setOnClickListener(new View.OnClickListener() {
                                @Override
                                public void onClick(View v) {
                                    fragClass1=new FragClass1();
                                    Bundle bundle=new Bundle();
    
                                    fragmentManager=getSupportFragmentManager();
                                    fragClass1.setArguments(bundle);
                                    bundle.putString("hello",edt.getText().toString());
                                    FragmentTransaction fragmentTransaction=fragmentManager.beginTransaction();
                                    fragmentTransaction.add(R.id.activity_main,fragClass1,"");
                                    fragmentTransaction.addToBackStack(null);
                                    fragmentTransaction.commit();
    
                                }
                            });
                        }
                    }
             Next Fragment to fetch the string.
                public class FragClass1 extends Fragment {
                      EditText showFrag1;
    
    
                        @Nullable
                        @Override
                        public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    
                            View view=inflater.inflate(R.layout.lay_frag1,null);
                            showFrag1= (EditText) view.findViewById(R.id.edtText);
                            Bundle bundle=getArguments();
                            String a=getArguments().getString("hello");//Use This or The Below Commented Code
                            showFrag1.setText(a);
                            //showFrag1.setText(String.valueOf(bundle.getString("hello")));
                            return view;
                        }
                    }
        I used Frame Layout easy to use.
        Don't Forget to Add Background color or else fragment will overlap.
    This is for First Fragment.
        <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:tools="http://schemas.android.com/tools"
            android:id="@+id/activity_main"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:paddingBottom="@dimen/activity_vertical_margin"
            android:paddingLeft="@dimen/activity_horizontal_margin"
            android:paddingRight="@dimen/activity_horizontal_margin"
            android:paddingTop="@dimen/activity_vertical_margin"
            android:background="@color/colorPrimary"
            tools:context="com.example.sumedh.fragmentpractice1.MainActivity">
    
            <EditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/editText" />
            <Button
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:id="@+id/BtnNext"/>
        </FrameLayout>
    
    
    Xml for Next Fragment.
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical" android:layout_width="match_parent"
       android:background="@color/colorAccent"
        android:layout_height="match_parent">
        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/edtText"/>
    
    </LinearLayout>
    
    0 讨论(0)
  • 2020-11-22 12:38

    Use a Bundle. Here's an example:

    Fragment fragment = new Fragment();
    Bundle bundle = new Bundle();
    bundle.putInt(key, value);
    fragment.setArguments(bundle);
    

    Bundle has put methods for lots of data types. See this

    Then in your Fragment, retrieve the data (e.g. in onCreate() method) with:

    Bundle bundle = this.getArguments();
    if (bundle != null) {
            int myInt = bundle.getInt(key, defaultValue);
    }
    
    0 讨论(0)
  • 2020-11-22 12:39

    Your input fragment

    public class SecondFragment extends Fragment  {
    
    
        EditText etext;
        Button btn;
        String etex;
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            View v = inflater.inflate(R.layout.secondfragment, container, false);
            etext = (EditText) v.findViewById(R.id.editText4);
            btn = (Button) v.findViewById(R.id.button);
            btn.setOnClickListener(mClickListener);
            return v;
        }
    
        View.OnClickListener mClickListener = new View.OnClickListener() {
            @Override
            public void onClick(View v) {
    
    
                etex = etext.getText().toString();
                FragmentTransaction transection = getFragmentManager().beginTransaction();
                Viewfragment mfragment = new Viewfragment();
                //using Bundle to send data
                Bundle bundle = new Bundle();
                bundle.putString("textbox", etex);
                mfragment.setArguments(bundle); //data being send to SecondFragment
                transection.replace(R.id.frame, mfragment);
                transection.isAddToBackStackAllowed();
                transection.addToBackStack(null);
                transection.commit();
    
            }
        };
    
    
    
    }
    

    your view fragment

    public class Viewfragment extends Fragment {
    
        TextView txtv;
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            View v = inflater.inflate(R.layout.viewfrag,container,false);
            txtv = (TextView)  v.findViewById(R.id.textView4);
            Bundle bundle=getArguments();
            txtv.setText(String.valueOf(bundle.getString("textbox")));
            return v;
        }
    
    
    }
    
    0 讨论(0)
  • 2020-11-22 12:43

    getArguments() is returning null because "Its doesn't get anything"

    Try this code to handle this situation

    if(getArguments()!=null)
    {
    int myInt = getArguments().getInt(key, defaultValue);
    }
    
    0 讨论(0)
提交回复
热议问题