#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:
Смотрите, один из вариантов решения этой вашей проблемы — использовать общие настройки. Но это будет немного утомительно.
Я предлагаю, чтобы вы реализовали что-то вроде;
- Существует опция редактирования текста с указанием пола.
- Вы хотите, чтобы событие on click отображало диалоговое окно, в котором пользователь может выбрать пол.
- Снова требуется, чтобы выбранный пол отражался в редактируемом тексте.
Для этого я предлагаю вам открыть диалоговое окно пользовательского оповещения, как только вы нажмете редактировать текст, с радиогруппой в пользовательском макете, раздуваемой диалогом оповещения, который раздувает этот макет.
Например:
Макет, который будет увеличен в диалоговом окне предупреждения
В этом макете у нас есть текст редактирования, но вы должны заменить его на радиогруппу пола
<?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 /