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