как получить значение из переключателя и отобразить при редактировании текста в другом фрагменте?

#java #android

#java #Android

Вопрос:

Из EditText я открываю другой фрагмент, в котором есть radigroup и radiobutton, чтобы выбрать опцию gender, как только я выбираю кнопку, она показывает на тосте выбранный мной пол, но теперь я хочу вернуться к более раннему фрагменту на кнопке OK и хочу показать выбранный пол в том же редактируемом тексте, из которого я выбрал.Я пришел сюда.

         [[[[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();


                }
            });

        }
    });


}
}
}]]]]]]
 

Ответ №1:

Первый фрагмент;

     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", "");
 

Комментарии:

1. Спасибо за ответ. Я пробовал это, но когда я добавляю код, упомянутый во втором фрагменте, приложение выходит из строя и выдает эту ошибку «Попытка вызвать виртуальный метод»java.lang. Строка android.os.Bundle.getString(java.lang. Строка, java.lang. Строка)’ в нулевой ссылке на объект.»

2. Когда я вижу, что ваш пакет становится нулевым, вы можете проверить, является ли он таким null… Bundle bundle = this.getArguments(); if (bundle != null) { String genderInNewFragment = bundle.getString(«пол», «»); } И проблема не в Bundle … Проблема в первом фрагменте.. Вы не можете вызвать пол, сначала проверьте его с помощью log или sout…

Ответ №2:

Смотрите, один из вариантов решения этой вашей проблемы — использовать общие настройки. Но это будет немного утомительно.

Я предлагаю, чтобы вы реализовали что-то вроде;

  1. Существует опция редактирования текста с указанием пола.
  2. Вы хотите, чтобы событие on click отображало диалоговое окно, в котором пользователь может выбрать пол.
  3. Снова требуется, чтобы выбранный пол отражался в редактируемом тексте.

Для этого я предлагаю вам открыть диалоговое окно пользовательского оповещения, как только вы нажмете редактировать текст, с радиогруппой в пользовательском макете, раздуваемой диалогом оповещения, который раздувает этот макет.

Например:

Макет, который будет увеличен в диалоговом окне предупреждения

В этом макете у нас есть текст редактирования, но вы должны заменить его на радиогруппу пола

     <?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 /