Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Android中从DialogFragment到MainActivity获取数据?_Java_Android_Android Fragments - Fatal编程技术网

Java 如何在Android中从DialogFragment到MainActivity获取数据?

Java 如何在Android中从DialogFragment到MainActivity获取数据?,java,android,android-fragments,Java,Android,Android Fragments,我使用DialogFragment创建了一个应用程序。我想从main活动中的DialogFragment和setText获取数据。在我的代码中,我成功地创建了AlertDialog。但是我无法将EditText值获取到MainActivity。应用程序崩溃。请帮助我解决问题。我非常感谢您的帮助 MainActivity.java: public class MainActivity extends ActionBarActivity { Button showDialog; TextView s

我使用
DialogFragment
创建了一个应用程序。我想从
main活动中的
DialogFragment
setText
获取数据。在我的代码中,我成功地创建了AlertDialog。但是我无法将EditText值获取到MainActivity。应用程序崩溃。请帮助我解决问题。我非常感谢您的帮助

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();
}
}
使用此过程应用程序将崩溃。

从更换

MainActivity mainActivity = new MainActivity(); 
致:

Activity mainActivity = (MainActivity)getActivity();

创建一个像-

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);

    
}
并通过以下方式修改MyAlert.java-

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}

}
并在MainActivity和overide方法okButtonClicked()中实现CustomDialogInterface 当调用onClick时,将调用MainActivity的onButtonClicked

并将showAlert更改为-

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 
        }
    }
或使用以下代码:

  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");        
     
}
}

在DialogFragment类的主活动类syncFolders()中执行挖掘操作后,使用新的更新值更新listview

   CustomDialogFragment extends DialogFragment{
//some logic for performining operation
String updatedValue=edittext.getText();

MainActivity activity=(MainActivity)getActivity();
activity.syncFolders(updatedValue);
}

为创建
接口
that@MD如果我想在一个活动中使用多个DialogFragment。如何导入多个接口?如果我想在一个活动中导入多个DialogFragment。如何导入多个接口?您可以实现多个接口,但只能扩展一个类。示例-类MyClass扩展了OtherClass实现interface1,interface2…K bro非常感谢..上帝保佑不
Activity
,我声明
MainActivity MainActivity=(MainActivity)getActivity()
正在工作。令人惊讶的是…这不是接口..@reegan29代码看起来一点也不正确
public void renameFile(){
RenameFileDialog dialog = new RenameFileDialog();
        dialog.show(getSupportFragmentManager(), DIALOG_RENAME_FILE);
  public void syncFolders(String value) {
 //some code
        new UpdateFolderAsyncTask().execute();
    }
   CustomDialogFragment extends DialogFragment{
//some logic for performining operation
String updatedValue=edittext.getText();

MainActivity activity=(MainActivity)getActivity();
activity.syncFolders(updatedValue);
}