Android : Passing argument from a DialogFragment to Fragment

on Thursday, October 30, 2014


I am running into an issue where I would like to pass a Set from a DialogFragment back to the Fragment that calls it initially.


I have tried implementing an interface but I cannot seem to get it to work properly from the Fragment.


Is there another way to arguments from a DialogFragment >> Fragment? Or would I need to implement the interface on the Activity, and then move it from there?


The issue seems to be a NullPointerException, and I am pretty sure it is because the interface needs to be implemented on the Activity level, and not on the Fragment. The crash occurs when hitting the "Positive Button" for the dialog.


DIALOGFRAGMENT



public class CustomPermissionDialog extends DialogFragment implements OnCheckedChangeListener { String _permission; View convertView; AlertDialog.Builder builder; Switch alertDelete; Set permSet = new TreeSet();




public static interface OnCompleteDialogInterface {
public abstract void OnCompleteDialog(Set mPermSet);
}

private OnCompleteDialogInterface mInterface;

public CustomPermissionDialog(Context context, String permissionName) {

_permission = permissionName;
mInterface = (OnCompleteDialogInterface) getActivity();
// TODO Auto-generated constructor stub
}

public Dialog onCreateDialog(Bundle savedInstanceState) {

LayoutInflater inflater = getActivity().getLayoutInflater();
builder = new AlertDialog.Builder(getActivity());

if (_permission == "Alerts") {
convertView = (View) inflater
.inflate(
getResources().getLayout(
R.layout.alerts_perm_dialog), null);
alertDelete = (Switch) convertView
.findViewById(R.id.switchAlertDelete);
alertDelete.setOnCheckedChangeListener(this);

}
if (_permission == "Automation") {
convertView = (View) inflater.inflate(
getResources().getLayout(R.layout.automation_perm_dialog),
null);

}
if (_permission == "Books") {
convertView = (View) inflater.inflate(
getResources().getLayout(R.layout.books_perm_dialog), null);

}

if (_permission == "Codes") {
convertView = (View) inflater.inflate(
getResources().getLayout(R.layout.codes_perm_dialog), null);

}

if (_permission == "DBS") {
convertView = (View) inflater.inflate(
getResources().getLayout(R.layout.dbs_perm_dialog), null);

}
if (_permission == "Feedback") {
convertView = (View) inflater.inflate(
getResources().getLayout(R.layout.feedback_perm_dialog),
null);

}

if (_permission == "Groups") {
convertView = (View) inflater
.inflate(
getResources().getLayout(
R.layout.groups_perm_dialog), null);

}

if (_permission == "Inventory") {
convertView = (View) inflater.inflate(
getResources().getLayout(R.layout.inventory_perm_dialog),
null);

}

if (_permission == "Jobs") {
convertView = (View) inflater.inflate(
getResources().getLayout(R.layout.jobs_perm_dialog), null);

}

if (_permission == "Locations") {
convertView = (View) inflater.inflate(
getResources().getLayout(R.layout.locations_perm_dialog),
null);

}

if (_permission == "Logs") {
convertView = (View) inflater.inflate(
getResources().getLayout(R.layout.logs_perm_dialog), null);

}

if (_permission == "Messages") {
convertView = (View) inflater.inflate(
getResources().getLayout(R.layout.messages_perm_dialog),
null);

}

if (_permission == "Services") {
convertView = (View) inflater.inflate(
getResources().getLayout(R.layout.services_perm_dialog),
null);

}
if (_permission == "Settings") {
convertView = (View) inflater.inflate(
getResources().getLayout(R.layout.settings_perm_dialog),
null);

}
if (_permission == "Templates") {
convertView = (View) inflater.inflate(
getResources().getLayout(R.layout.templates_perm_dialog),
null);

}
if (_permission == "Tools") {
convertView = (View) inflater.inflate(
getResources().getLayout(R.layout.tools_perm_dialog), null);

}
if (_permission == "Updates") {
convertView = (View) inflater.inflate(
getResources().getLayout(R.layout.updates_perm_dialog),
null);

}
if (_permission == "Users") {
convertView = (View) inflater.inflate(
getResources().getLayout(R.layout.users_perm_dialog), null);

}

// defining the alertdialog
builder.setTitle(_permission + " Permissions");

builder.setView(convertView);
builder.setPositiveButton(R.string.accept,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// do something with the new note
mInterface.OnCompleteDialog(permSet);

}
}).setNegativeButton(R.string.cancel,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// User cancelled the dialog
}
});

return builder.create();
}

@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
// TODO Auto-generated method stub
if (alertDelete.isChecked()) {
// The toggle is enabled
permSet.add("alert_delete");
Log.e("ALERTDELETE", "CHECKED");
} else {
// The toggle is disabled
permSet.remove("alert_delete");
Log.e("ALERTDELETE", "UNCHECKED");
}

}


}


INSIDE THE FRAGMENT



@Override
public void OnCompleteDialog(Set mPermSet) {
// TODO Auto-generated method stub
this.permSet = mPermSet;
String tempPermString = permSet.toString();
Log.e("PERMISSIONS", tempPermString);

}


STACKTRACE



10-30 11:41:30.081: E/AndroidRuntime(16925): FATAL EXCEPTION: main
10-30 11:41:30.081: E/AndroidRuntime(16925): Process: com.e.main, PID: 16925
10-30 11:41:30.081: E/AndroidRuntime(16925): java.lang.NullPointerException
10-30 11:41:30.081: E/AndroidRuntime(16925): at com.e.dialog.CustomPermissionDialog$1.onClick(CustomPermissionDialog.java:171)
10-30 11:41:30.081: E/AndroidRuntime(16925): at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:166)
10-30 11:41:30.081: E/AndroidRuntime(16925): at android.os.Handler.dispatchMessage(Handler.java:102)
10-30 11:41:30.081: E/AndroidRuntime(16925): at android.os.Looper.loop(Looper.java:136)
10-30 11:41:30.081: E/AndroidRuntime(16925): at android.app.ActivityThread.main(ActivityThread.java:5105)
10-30 11:41:30.081: E/AndroidRuntime(16925): at java.lang.reflect.Method.invokeNative(Native Method)
10-30 11:41:30.081: E/AndroidRuntime(16925): at java.lang.reflect.Method.invoke(Method.java:515)
10-30 11:41:30.081: E/AndroidRuntime(16925): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:792)
10-30 11:41:30.081: E/AndroidRuntime(16925): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:608)

0 comments:

Post a Comment