获取并添加额外的DialogFragment

时间:2014-09-30 00:37:16

标签: android android-intent android-edittext android-dialogfragment

我正在编写一个用户描述问题然后接收建议的应用程序。用户按下一个按钮,该按钮显示带有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();
    }
}

3 个答案:

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