使用DialogFragment中的EditText更改主活动中的TextView?

时间:2015-09-23 04:29:46

标签: android textview fragment alertdialog editview

所以我正在尝试第一次尝试使用Android应用,这只是一个简单的垒球游戏记分员。我已经得到了分数,出局等等,现在它只显示了" Home"和#34;离开。"我想让用户有机会输入实际的团队名称。为此,我添加了一个自定义的AlertDialog,弹出一个EditText,所以当你点击" OK"它会更新Home / Away团队名称。

问题是我在本周的大部分时间里一直在谷歌搜索这个问题而且我还没有找到一种方法来实际做到这一点。我尝试过标记片段的布局XML,这样我就可以找到EditText,但它总是给我一个空引用并崩溃应用程序。我添加了一个TextWatcher,可能会看到片段的文本,但是一旦改变并点击了#34;好的,"没啥事儿。尝试将TextWatch添加到片段中,我认为它崩溃了,大概是两个小时前我已经筋疲力尽了。

真的,我想我需要一种方法让片段找到带有团队名称的TextView,并在我点击时将其更改为EditText的值,但我不知道该怎么做。或者也许我已经看过它并且不理解它,我只做了大约两个月。我发布了我的代码,但我删除了所有没有用的东西,因为它占用了大部分屏幕空间。有什么想法吗?

编辑:所以我遵循下面关于定义视图的建议,可能会发现EditText的价值,但是打击" OK"只是让它将TextView设置为空值。我想这是因为当对话框关闭时,EditText的内容消失了。无论是那个还是这个都是错的。 View dialogname = getActivity().getLayoutInflater().inflate(R.layout.fragment_home, null); EditText mEtName = (EditText) dialogname.findViewById(R.id.homeName); View mainAct = getActivity().getLayoutInflater().inflate(R.layout.activity_softball, null); TextView oTextView = (TextView) mainAct.findViewById(R.id.teamOne); newName = mEtName.getText().toString(); oTextView.setText(newName)

2 个答案:

答案 0 :(得分:1)

我认为在为id定义EditText时你做错了。你需要给它一个对话框参考。

而不是

 Edittext edittext = (EditText) findViewById(R.id.editText);

喜欢

 Edittext edittext = (EditText) dialog.findViewById(R.id.editText);

答案 1 :(得分:0)

刚才经历过这个问题。我创建了自己的类DialogFragment。当我尝试初始化对话框中的EditText时,我得到了null

mEtName = (EditText)dialog.findViewById(R.id.editText);

所以,我用这种方式初始化它并且它起作用了:

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
    ...
    View dialogName = getActivity().getLayoutInflater().inflate(R.layout.dialog_name, null);
    mEtName = (EditText) dialogName.findViewById(R.id.dialog_etxt_name);
    }

R.layout.dialog_name是我的自定义对话框布局。