Java – How do I get data from DialogFragment to MainActivity in Android?

How do I get data from DialogFragment to MainActivity in Android?… here is a solution to the problem.

How do I get data from DialogFragment to MainActivity in Android?

I created an application using DialogFragment. I want to get data > from setText in DialogFragment and MainActivity. In my code, I successfully created AlertDialog. But I can’t get the EditText value to the MainActivity. The application crashed. Please help me with this. I really appreciate any help.

MainActivity.java :

public class MainActivity extends ActionBarActivity {
Button showDialog;
TextView showText;
String myNameStr;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    showDialog = (Button)findViewById(R.id.myBtn);
    showText = (TextView)findViewById(R.id.showText);
    showDialog.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            showMyAlert(v);
        }
    });
}

public void showMyAlert(View view) {
    MyAlert myAlert = new MyAlert();
    myAlert.show(getFragmentManager(), "My New Alert");
}

public void setMyNameStr(String myNameStr) {
    showText.setText(myNameStr);
}
}

MyAlert.java:

public class MyAlert extends DialogFragment implements OnClickListener {
private EditText getEditText;
MainActivity callBackActivity;

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {

callBackActivity = new MainActivity();
    getEditText = new EditText(getActivity());
    getEditText.setInputType(InputType.TYPE_CLASS_TEXT);
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    builder.setTitle("Get UserName :");
    builder.setMessage("Enter Your Name :");
    builder.setPositiveButton("Ok", this);
    builder.setNegativeButton("Cancel", null);
    builder.setView(getEditText);
    return builder.create();
}

@Override
public void onClick(DialogInterface dialog, int which) {
    String value = getEditText.getText().toString();
    Log.d("Name : ", value);
    MainActivity mainActivity = new MainActivity();
    mainActivity.setMyNameStr(value);
    dialog.dismiss();
}
}

Use this procedure to crash the application.

Solution

Replace from

MainActivity mainActivity = new MainActivity(); 

to:

Activity mainActivity = (MainActivity)getActivity();

Related Problems and Solutions