【问题标题】:SetText of TextView in DialogFragment from Calling Activity调用活动中 DialogFragment 中 TextView 的 SetText
【发布时间】:2014-03-21 23:26:57
【问题描述】:

构建 Android 应用时遇到了一些问题。如有任何帮助,我将不胜感激!

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

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

然后我在Activity A中使用这个方法

Account_Create_Error error = new Account_Create_Error();
error.show(getFragmentManager(), "error");
error.setError(json.getString("response"));

我似乎从 findViewById 得到了一个空指针异常。

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

谢谢!!

【问题讨论】:

  • 你在Account_Create_Error构造函数中调用setContentView()吗?
  • 尝试在DialogFragment onViewCreated(...) 方法中使用view.findViewById(R.id.message) 并将您的TextView error; 声明移动为DialogFragment 的实例成员。
  • 我没有调用 setContentView。

标签: android textview android-dialogfragment settext findviewbyid


【解决方案1】:

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

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


    }

【讨论】:

  • 谢谢!这行得通。我必须做的唯一改变是使用我自定义创建的视图来设置 textview 而不是 setmessage。 setmessage 工作正常,但我有一个自定义视图,所以它只出现在顶部。再次感谢你!你摇滚。
  • 欢迎。很高兴知道它有帮助。
【解决方案2】:

尝试从构建器中设置的查看器获取 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 方法。查看器已按照doc 中的建议在构建器中设置

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 我正在尝试这个,但未能成功。该应用程序仍然崩溃。我应该将接口添加到 DialogFragment 并在 DialogFragment 和 Activity A 中实现它吗?我尝试在 DialogFragment(不知道为什么会这样)和 Activity A 中都实现它,但没有任何效果。
    • 朋友,你会在FragmentActivity中实现这个接口,然后像这样从Activity类调用(new FragmentClass().implementedFunction();)
    猜你喜欢
    • 2019-08-15
    • 1970-01-01
    • 2018-01-19
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 2022-01-07
    • 1970-01-01
    相关资源
    最近更新 更多