我有一个具有AlertDialog的应用程序,显示单个EditText.我遵循
Android开发者指南来做,但是我找不到如何获取用户输入的数据.
自定义布局只有一个EditText:
<EditText android:id="@+id/license_value" android:inputType="text" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="@string/license" />
我正在使用DialogFragment创建对话框.当用户点击ok按钮时,我使用一个界面来获取数据.
public class EditLicenseDialogFragment extends DialogFragment { public interface EditLicenseDialogListener { public void onDialogPositiveClick(DialogFragment dialog,String value); } private EditLicenseDialogListener mListener; // Override the Fragment.onAttach() method to instantiate the NoticeDialogListener @Override public void onAttach(Activity activity) { super.onAttach(activity); // Verify that the host activity implements the callback interface try { // Instantiate the NoticeDialogListener so we can send events to the host mListener = (EditLicenseDialogListener) activity; } catch (ClassCastException e) { // The activity doesn't implement the interface,throw exception throw new ClassCastException(activity.toString() + " must implement NoticeDialogListener"); } } @Override public Dialog onCreateDialog(Bundle savedInstanceState) { // Use the Builder class for convenient dialog construction AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder.setTitle(R.string.new_license); LayoutInflater inflater = getActivity().getLayoutInflater(); builder.setView(inflater.inflate(R.layout.edit_license,null)) .setPositiveButton(R.string.ok,new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog,int id) { // GET VALUE. HOW TO DO IT? EditText valueView = (EditText) getActivity().findViewById(R.id.license_value); if(valueView == null) Log.d("AA","NULL"); else{ String value = valueView.getText().toString(); mListener.onDialogPositiveClick(EditLicenseDialogFragment.this,value); } }) .setNegativeButton(R.string.cancel,new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog,int id) { EditLicenseDialogFragment.this.getDialog().cancel(); } }); return builder.create(); } }
在我的活动中,我执行以下操作:
public class LicenseListActivity extends FragmentActivity implements EditLicenseDialogFragment.EditLicenseDialogListener{ ... findViewById(R.id.buttonAddLicense).setOnClickListener( new View.OnClickListener() { public void onClick(View view) { DialogFragment dialog = new EditLicenseDialogFragment(true); dialog.show(getSupportFragmentManager(),"EditLicenseDialogFragment"); } }); @Override public void onDialogPositiveClick(DialogFragment dialog,String value) { Log.d("TAG",value); }
我尝试在DialogFragment中检索的EditText始终为NULL.如何获取EditText的值?
谢谢!
解决方法
我认为这是因为你试图找到你的edittext的观点是不正确的.
应该是这样的:
LayoutInflater inflater = getActivity().getLayoutInflater(); View dialogView = inflater.inflate(R.layout.edit_license,null); builder.setView(dialogView) .setPositiveButton(R.string.ok,new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog,int id) { EditText valueView = (EditText) dialogView.findViewById(R.id.license_value); //here if(valueView == null) Log.d("AA","NULL"); else{ String value = valueView.getText().toString(); mListener.onDialogPositiveClick(EditLicenseDialogFragment.this,value); } })