来自Calling Activity的DialogFragment中TextView的SetText

时间:2014-03-21 23:26:57

标签: android textview android-dialogfragment settext findviewbyid

构建Android应用并遇到一些麻烦。我很感激任何帮助!

我创建了一个扩展DialogFragment(Account_Create_Error)的类,我从Activity A调用它。我想在Activity中设置此DialogFragment中的TextView字段。我在dialogfragment中创建了一个方法

public void setError(String message) {
           TextView error = (TextView)getActivity().findViewById(R.id.message);
           error.setText(message);
}

然后我通过

在活动A中使用此方法
Account_Create_Error error = new Account_Create_Error();
error.show(getFragmentManager(), "error");
error.setError(json.getString("response"));

我似乎从findViewById获得了一个nullpointer异常。

如果提供更多我的代码会有所帮助,请告诉我。

谢谢!

3 个答案:

答案 0 :(得分:4)

我们可以使用构造函数将数据传递给对话框片段。

UserActionDialogFragment dialog = UserActionDialogFragment.newInstance(errorMesssage);
dialog.show(getFragmentManager(), TAG);

UserActionDialogFragment extends DialogFragment

public class NotificationDialogFragment extends DialogFragment {

    private static final String TAG = "NotificationDialogFragment";

    private String mMessageToDisplay;

    public static NotificationDialogFragment newInstance(
            String message) {

        NotificationDialogFragment infoDialog = new NotificationDialogFragment();
        mMessageToDisplay = message


    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        AlertDialog.Builder alertDialog = new AlertDialog.Builder(getActivity());
        alertDialog.setMessage(mMessageToDisplay);
        alertDialog.setNeutralButton(R.string.label_ok,
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface arg0, int arg1) {

                    }
                });
        return alertDialog.create();
    }


    }

答案 1 :(得分:1)

尝试从构建器中设置的查看器获取EditText,而不是getActivity()。这应该够了

@Override
public Dialog onCreateDialog(Bundle savedInstanceState){
            super.onCreate(savedInstanceState);
    LayoutInflater inflater = getActivity().getLayoutInflater();
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    View view = inflater.inflate(R.layout.your_dialog, null);
    builder.setView(view);  
    EditText error = (EditText)(view.findViewById(R.id.message));
    ....
    return builder.create();
}

如上所述,我没有使用onViewCreated方法。根据{{​​3}}

中的建议,在构建器中设置查看器

答案 2 :(得分:0)

亲爱的朋友,我的一个项目也遇到了同样的问题。 我用这种方式解决它: 创建一个接口并在我的fragment类中实现它。在我实现的函数中,我更新了我的textView。  (在您的情况下,您需要在调用此函数之前初始化errorTV。)