我正在编写一个用户描述问题然后接收建议的应用程序。用户按下一个按钮,该按钮显示带有EditText
的对话框。一旦用户按下OK
,我想获得他们的输入,但我在使用附加功能时遇到了麻烦。我读过类似的问题,但我似乎无法找到问题所在。在显示信息的摘要屏幕上,不会显示任何文本。任何帮助表示赞赏!
我认为问题是我在getText()
上致电EditText
时。使用log.d
mText
只是一个空字符串。
这是我的代码:
从中调用对话框的片段AdviceFragment
:
private static final String DIALOG_TEXT = "text";
private static final int REQUEST_TEXT = 0;
private Advice mAdvice;
private boolean hasText;
...
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState)
{
...
mTextButton = (Button) v.findViewById(R.id.textButton);
mTextButton.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
FragmentManager fm = getActivity().getSupportFragmentManager();
InputTextFragment dialog = new InputTextFragment();
dialog.setTargetFragment(AdviceFragment.this, REQUEST_TEXT);
dialog.show(fm, DIALOG_TEXT);
}
});
}
...
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
if (resultCode != Activity.RESULT_OK)
{
return;
}
if (resultCode == REQUEST_TEXT)
{
String text = data.getStringExtra(InputTextFragment.EXTRA_TEXT);
if (text.length() > 0)
{
mAdvice.setText(text);
hasText = true;
}
else
{
mAdvice.setText(null);
hasText = false;
}
}
InputTextFragment
对话框:
public class InputTextFragment extends DialogFragment
{
public static final String EXTRA_TEXT = "text";
private String mText;
private void sendResult(int resultCode)
{
if (getTargetFragment() == null)
{
return;
}
Intent i = new Intent();
i.putExtra(EXTRA_TEXT, mText.toString());
getTargetFragment().onActivityResult(getTargetRequestCode(), resultCode, i);
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState)
{
View v = getActivity().getLayoutInflater().inflate(R.layout.dialog_input_text, null);
final EditText editText = new EditText(getActivity());
return new AlertDialog.Builder(getActivity())
.setView(v)
.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int whichButton)
{
String input = editText.getText().toString();
if (input.length() > 0)
{
mText = input;
}
else
{
return;
}
sendResult(Activity.RESULT_OK);
}
})
.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener()
{
...
})
.create();
}
}
答案 0 :(得分:1)
这里试试这个:
Public class AdviceFragment extends Fragment implements OkClickListener{
@Override
Public void onClick(String data){
//DO YOUR CODE HERE
}
}
InputTextFragment
Public Class InputTextFragment extends DialogFragment{
public interface OkClickListener{
public void onClick(String data);
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState)
{
View v = getActivity().getLayoutInflater().inflate(R.layout.dialog_input_text, null);
final EditText editText = new EditText(getActivity());
return new AlertDialog.Builder(getActivity())
.setView(v)
.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int whichButton)
{
String input = editText.getText().toString();
if (input.length() > 0)
{
mText = input;
}
else
{
return;
}
((OkClicklistener)getTargetFragment()).onClick(data);
}
})
.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener()
{
...
})
.create();
}
}
}
答案 1 :(得分:1)
final EditText editText = new EditText(getActivity());
问题在于此处,您的EditText未添加到对话框的视图树中。我想你应该这样做:
final EditText editText = (EditText)v.findViewById(your_edittext_id);
谢谢,我认为这解决了部分问题。在。中使用log.d setPositiveButton()的onClick()方法显示它成功 分配价值。但是,我还没有得到任何东西 调用onActivityResult()。你知道出了什么问题吗?
看这里,另一个错字问题:
if (resultCode == REQUEST_TEXT)
{
应该是requestCode。
我认为这应该可以解决您的问题,但您最好遵循bean_droid建议并使用接口而不是调用onActivityResult()方法。这是因为您的代码的其他部分可能会调用该方法,这是您不想要的。
答案 2 :(得分:0)
替换sendResult(Activity.RESULT_OK); to getActivity()。setResult(resultCode);