Friday, 20 September 2013

Custom DialogFragment Example in android

By this example you can access your DialogFragment throughout the application. You can send arguments to DialogFragment, and also you can retrieve values from DialogFragment.

Screenshot:


Code:

MyCustomDialog.java
package com.andoid.dialogfragment;

import android.app.Dialog;
import android.app.DialogFragment;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.EditText;

public class MyCustomDialog extends DialogFragment {
 Button mButton;
 EditText mEditText;
 onSubmitListener mListener;
 String text = "";

 interface onSubmitListener {
  void setOnSubmitListener(String arg);
 }

 @Override
 public Dialog onCreateDialog(Bundle savedInstanceState) {
  final Dialog dialog = new Dialog(getActivity());
  dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
  dialog.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
    WindowManager.LayoutParams.FLAG_FULLSCREEN);
  dialog.setContentView(R.layout.custom_dialog);
  dialog.getWindow().setBackgroundDrawable(
    new ColorDrawable(Color.TRANSPARENT));
  dialog.show();
  mButton = (Button) dialog.findViewById(R.id.button1);
  mEditText = (EditText) dialog.findViewById(R.id.editText1);
  mEditText.setText(text);
  mButton.setOnClickListener(new OnClickListener() {

   @Override
   public void onClick(View v) {
    mListener.setOnSubmitListener(mEditText.getText().toString());
    dismiss();
   }
  });
  return dialog;
 }
}


custom_dialog.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#efefef"
    android:gravity="center"
    android:orientation="vertical" >

    <EditText
        android:id="@+id/editText1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10" >

        <requestFocus />
    </EditText>

    <Button
        android:id="@+id/button1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Submit" />

</LinearLayout>


Code for access this DialogFragment from our Activity
MainActivity.java
package com.andoid.dialogfragment;

import com.andoid.dialogfragment.MyCustomDialog.onSubmitListener;

import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.app.Activity;

public class MainActivity extends Activity implements onSubmitListener {
 TextView mTextView;
 Button mButton;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  mTextView = (TextView) findViewById(R.id.textView1);
  mButton = (Button) findViewById(R.id.button1);
  mButton.setOnClickListener(new OnClickListener() {
   
   @Override
   public void onClick(View v) {
    MyCustomDialog fragment1 = new MyCustomDialog(); 
    fragment1.mListener = MainActivity.this;
    fragment1.text = mTextView.getText().toString();
    fragment1.show(getFragmentManager(), "");
   }
  });  
  
 }

 @Override
 public void setOnSubmitListener(String arg) {
  mTextView.setText(arg);
 }

}


activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"    
     >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"        
        android:text="Change Text" />

</LinearLayout>



I hope this post is useful to you. kindly share your feedback as comment here.


Thank You