1

所以我正在做我的第一次真正的Android应用尝试,只是一个简单的垒球比赛记分员。我有它计算分数、出局等,现在它只显示“主场”和“客场”。我想让用户有机会输入实际的团队名称。为此,我添加了一个自定义 AlertDialog,它会弹出一个 EditText,因此当您点击“确定”时,它将更新主/客队名称。

问题是我这周的大部分时间都在谷歌上搜索,但我还没有找到一种方法来真正做到这一点。我已经尝试标记片段的布局 XML,以便我可以找到 EditText,但它总是给我一个空引用并使应用程序崩溃。我添加了一个 TextWatcher,它可能会查看片段的文本,但一旦更改并点击“OK”,什么也没发生。尝试将 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)

4

2 回答 2

1

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

而不是做

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

喜欢

 Edittext edittext = (EditText) dialog.findViewById(R.id.editText);
于 2015-09-23T04:48:26.367 回答
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我的自定义对话框布局在哪里。

于 2015-09-23T04:57:30.913 回答