How to get the Data from DialogFragment to MainActivity in Android?

前端 未结 4 574
自闭症患者
自闭症患者 2021-01-14 00:51

I create a application using DialogFragment.I want to get the Data from DialogFragment and setText in the MainActivity. I

相关标签:
4条回答
  • 2021-01-14 01:13

    replace from

    MainActivity mainActivity = new MainActivity(); 
    

    to:

    Activity mainActivity = (MainActivity)getActivity();
    
    0 讨论(0)
  • 2021-01-14 01:23
    public void renameFile(){
    RenameFileDialog dialog = new RenameFileDialog();
            dialog.show(getSupportFragmentManager(), DIALOG_RENAME_FILE);
    

    }

      public void syncFolders(String value) {
     //some code
            new UpdateFolderAsyncTask().execute();
        }
    

    update listview with new updated value after performining operation in main activity class syncFolders() in DialogFragment class

       CustomDialogFragment extends DialogFragment{
    //some logic for performining operation
    String updatedValue=edittext.getText();
    
    MainActivity activity=(MainActivity)getActivity();
    activity.syncFolders(updatedValue);
    }
    
    0 讨论(0)
  • 2021-01-14 01:30
            you can achieve this using a interface,by sending your data from a fragment to main activity,below i have edited your complete code and its working fine....
           Here is the code with example
            Your Main Activity
            package com.example.dialogfragment;
    
            import android.annotation.TargetApi;
            import android.app.Activity;
            import android.os.Build;
            import android.os.Bundle;
            import android.view.View;
            import android.widget.Button;
            import android.widget.TextView;
    
            @TargetApi(Build.VERSION_CODES.HONEYCOMB)
            public class MainActivity extends Activity  implements SetName{
                Button showDialog;
                TextView showText;
                @Override
                protected void onCreate(Bundle savedInstanceState) {
                    super.onCreate(savedInstanceState);
                    setContentView(R.layout.activity_main);
                    showDialog = (Button)findViewById(R.id.button1);
                    showText = (TextView)findViewById(R.id.textView2);
                    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) {
    
                }
    
    
                @Override
                public void setMyName(String string) {
                    // TODO Auto-generated method stub
    
                    showText.setText(string);
    
                }
    
            }
    
        Your Alert
        import android.annotation.TargetApi;
        import android.app.Activity;
        import android.app.AlertDialog;
        import android.app.Dialog;
        import android.app.DialogFragment;
        import android.content.DialogInterface;
        import android.content.DialogInterface.OnClickListener;
        import android.os.Build;
        import android.os.Bundle;
        import android.text.InputType;
        import android.util.Log;
        import android.widget.EditText;
    
        @TargetApi(Build.VERSION_CODES.HONEYCOMB)
        public class MyAlert extends DialogFragment implements OnClickListener {
    
            private EditText getEditText;
            MainActivity callBackActivity;
            SetName setname;
    
            @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 onAttach(Activity a) {
                super.onAttach(a);
                setname = (SetName) a;
            }
            @Override
            public void onClick(DialogInterface dialog, int which) {
                String value = getEditText.getText().toString();
                Log.d("Name : ", value);
                // MainActivity mainActivity = new MainActivity();
                setname .setMyName(value);
                //setname = (SetName)
                // setname = (SetName)getActivity();
                dialog.dismiss();
            }
    
    
        }
    
    Create a Interface
    
    public interface SetName {
    
    
        void setMyName(String string);
    
    }
    
    
    Now what you should do is create onAttach in your alertFragment and call your interface..
    
    0 讨论(0)
  • 2021-01-14 01:31

    Create an interface like-

    CustomDialogInterface.java

    public interface CustomDialogInterface {
        
            // This is just a regular method so it can return something or
            // take arguments if you like.
        public void okButtonClicked(String  value);
    
        
    }
    

    and modify your MyAlert.java by-

    public class MyAlert extends DialogFragment implements OnClickListener {
    
    private EditText getEditText;
    MainActivity callBackActivity;
    CustomDialogInterface customDI;
    
    public MyAlert(CustomDialogInterface customDI)
    {
        this.customDI = customDI;
    }
    
    @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);
        dialog.dismiss();
        customDI.okButtonClicked(value);
    
    
    }
    
    
    void setCustomDialogInterface(CustomDialogInterface customDialogInterface){
        this. customDI = customDialogInterface;
    c}
    
    }
    

    And implement CustomDialogInterface in your MainActivity and overide method okButtonClicked() When onClick will be called then your MainActivity's onButtonClicked will be called .

    and change showAlert to -

    class MainActivity..... implements CustomDialogInterface { 
            
            public void showMyAlert(View view) {
                 MyAlert myAlert = new MyAlert(this);
                 myAlert.show(getFragmentManager(), "My New Alert");
            }
            
            @Overide
            public void okButtonClicked(String  value){
                // handle 
            }
        }
    

    or use following code :

      public void showMyAlert(View view) {
    
         MyAlert myAlert = new MyAlert(this);
         myAlert.setCustomDialogInterface(new CustomDialogInterface() {
                @Override
                public void okButtonClicked(String value) {
                    //handle click
                }
            });
         myAlert.show(getFragmentManager(), "My New Alert");        
         
    }
    
    0 讨论(0)
提交回复
热议问题