Passing the click events back to the dilaog's host in android

In this post i am going to show you how to get the dialog's click events back to the host activity or fragment. By default the click events of a dialog is handled by the DialogFragment. You can transfer the click events back to the host activity or fragment by declaring an interface in the dilalog class.
Ads by Google



In this example we have a TextView in the activity_main.xml file. We have to change the font color of the TextView using an alert dialog with single choice list. So the user can select a color from the dilalog and we set that particular color as the font color for the TextView.

ColorDialog.java
1:  public class ColorDialog extends DialogFragment  
2: {
3: CharSequence[] sequence = {"RED","GREEN","BLUE"};
4: String color_selection;
5: @Override
6: public Dialog onCreateDialog(Bundle savedInstanceState) {
7: AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
8: builder.setTitle("Choose your color...");
9: builder.setSingleChoiceItems(sequence, -1, new OnClickListener() {
10: @Override
11: public void onClick(DialogInterface dialog, int which) {
12: color_selection = (String)sequence[which];
13: }
14: });
15: builder.setPositiveButton("OK", new OnClickListener() {
16: @Override
17: public void onClick(DialogInterface dialog, int which) {
18: color_interface.positiveClick(ColorDialog.this,color_selection);
19: }
20: });
21: builder.setNegativeButton("CANCEL", new OnClickListener() {
22: @Override
23: public void onClick(DialogInterface dialog, int which) {
24: color_interface.negetiveClick(ColorDialog.this);
25: }
26: });
27: return builder.create();
28: }
29: public interface ColorInterface
30: {
31: public void positiveClick(DialogFragment dialog,String color_selection);
32: public void negetiveClick(DialogFragment dialog);
33: }
34: ColorInterface color_interface;
35: @Override
36: public void onAttach(Activity activity) {
37: // TODO Auto-generated method stub
38: super.onAttach(activity);
39: try
40: {
41: color_interface = (ColorInterface) activity;
42: }
43: catch(ClassCastException e)
44: {
45: throw new ClassCastException(activity.toString() + "must override methods..");
46: }
47: }
48: }

MainActivity.java
1:  public class MainActivity extends FragmentActivity implements ColorInterface {  
2: TextView text_view;
3: @Override
4: protected void onCreate(Bundle savedInstanceState) {
5: super.onCreate(savedInstanceState);
6: setContentView(R.layout.activity_main);
7: text_view = (TextView) findViewById(R.id.textView1);
8: text_view.setOnClickListener(new OnClickListener() {
9: @Override
10: public void onClick(View arg0) {
11: ColorDialog dialog = new ColorDialog();
12: dialog.show(getSupportFragmentManager(), "my_tag");
13: }
14: });
15: }
16: @Override
17: public void positiveClick(DialogFragment dialog,String color_selection) {
18: if(color_selection.equals("RED"))
19: {
20: text_view.setTextColor(Color.RED);
21: }
22: else if (color_selection.equals("BLUE"))
23: {
24: text_view.setTextColor(Color.BLUE);
25: }
26: else if (color_selection.equals("GREEN"))
27: {
28: text_view.setTextColor(Color.GREEN);
29: }
30: }
31: @Override
32: public void negetiveClick(DialogFragment dialog) {
33: Toast.makeText(getBaseContext(), "No color selected..",Toast.LENGTH_SHORT).show();
34: }
35: }