如何从单选按钮中获取值并在另一个片段上显示编辑文本?

5cg8jx4n  于 2021-06-29  发布在  Java
关注(0)|答案(2)|浏览(193)

从edittext我打开另一个片段,其中有一个radigroup和单选按钮来选择性别选项,一旦我选择了按钮,它会显示在toast上我选择的性别,但现在我想回到前面的片段“确定”按钮上,并想显示在同一个编辑文本上,我来这里选择的性别。

[[[[radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(RadioGroup group, int checkedId) {
            RadioButton radioButton = view.findViewById(checkedId);
            RadioButton rMale= view.findViewById(R.id.male);
            RadioButton rFemale= view.findViewById(R.id.female);
            RadioButton rOthers= view.findViewById(R.id.other);

            Integer id = radioButton.getId();
            String gender = id.toString();

            if (rMale.isChecked()) {
                gender="Male";
            }else if(rFemale.isChecked()){
                gender="Female";
            }else if (rOthers.isChecked()){
                gender="Others";
            }

            Toast.makeText(getContext(),gender,Toast.LENGTH_SHORT).show();

            OKbtn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    Integer id = radioButton.getId();
                    String gender = id.toString();

                    if (rMale.isChecked()) {
                        gender="Male";
                    }else if(rFemale.isChecked()){
                        gender="Female";
                    }else if (rOthers.isChecked()){
                        gender="Others";
                    }
                    Fragment fragment = new UploadPostFragment();
                    Bundle bundle = new Bundle();
                    bundle.putString("gender",gender);
                    fragment.setArguments(bundle);
                    FragmentManager fragmentManager = getFragmentManager();
                    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
                    fragmentTransaction.replace(R.id.framelayout,fragment);
                    fragmentTransaction.commit();

                    Toast.makeText(getContext(),gender,Toast.LENGTH_SHORT).show();

                }
            });

        }
    });

}
}
}]]]]]]
x4shl7ld

x4shl7ld1#

第一个碎片;

Bundle info = new Bundle();

    info.putString("gender", gender);

    fragment.setArguments(info);

    fragmentManager.beginTransaction().replace(R.id.fragment_container,
            fragment).commit();

第二个片段;

Bundle bundle = this.getArguments();

String genderInNewFragment = bundle.getString("gender", "");
ctrmrzij

ctrmrzij2#

请参阅解决您的这个问题的一个选项是使用共享首选项。但这将是一个小泰迪斯。
我的建议是,你必须实现一些东西,比如;
有编辑文本与性别选项。
您希望单击事件显示一个对话框,用户可以在其中选择性别。
用户再次希望所选性别反映在编辑文本上。
为此,我建议您在单击编辑文本后打开一个自定义警报对话框,自定义布局中的一个无线电组由正在膨胀此布局的警报对话框膨胀。
例如:
警报对话框中要膨胀的布局
在这个布局中,我们有编辑文本,但你必须替换为性别的广播组

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
  xmlns:android="http://schemas.android.com/apk/res/android" 
  android:orientation="vertical" 
  android:paddingLeft="20dp" 
  android:paddingRight="20dp" 
  android:layout_width="match_parent" 
  android:layout_height="match_parent"> 

  <EditText 
    android:id="@+id/editText" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"/> 
</LinearLayout>

主要活动
主活动中的按钮将触发警报对话框,但您必须将其替换为单击编辑文本

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout
    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"
    android:gravity="center"
    android:id="@+id/root"
    android:orientation="vertical"
    tools:context=".MainActivity"> 

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="showAlertDialogButtonClicked"
        android:text="Show Dialog"
     /> 
</LinearLayout>

主要活动java

public class MainActivity 
    extends AppCompatActivity { 

    @Override
    protected void onCreate( 
        Bundle savedInstanceState) 
    { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_main); 
    } 

    public void showAlertDialogButtonClicked(View view) 
    { 

        // Create an alert builder 
        AlertDialog.Builder builder 
            = new AlertDialog.Builder(this); 
        builder.setTitle("Name"); 

        // set the custom layout 
        final View customLayout 
            = getLayoutInflater() 
                .inflate( 
                    R.layout.custom_layout, 
                    null); 
        builder.setView(customLayout); 

        // add a button 
        builder 
            .setPositiveButton( 
                "OK", 
                new DialogInterface.OnClickListener() { 

                    @Override
                    public void onClick( 
                        DialogInterface dialog, 
                        int which) 
                    { 

                        // send data from the 
                        // AlertDialog to the Activity 
                        EditText editText 
                            = customLayout 
                                .findViewById( 
                                    R.id.editText); 
                        sendDialogDataToActivity( 
                            editText 
                                .getText() 
                                .toString()); 
                    } 
                }); 

        // create and show 
        // the alert dialog 
        AlertDialog dialog 
            = builder.create(); 
        dialog.show(); 
    } 

    // Do something with the data 
    // coming from the AlertDialog 
    private void sendDialogDataToActivity(String data) 
    { 
        Toast.makeText(this, 
                    data, 
                    Toast.LENGTH_SHORT) 
            .show(); 
    } 
}

参考文献:https://www.geeksforgeeks.org/how-to-create-a-custom-alertdialog-in-android/

相关问题