2

我已经阅读了很多关于这个问题的内容,但我没有让我的案例工作。

我在 XML 布局文件中定义了一个带有初始文本的 TextView 元素。

如果我尝试通过以下操作从主活动类(FragmentActivity)修改它:

TextView domainText = (TextView) view.findViewById(R.id.domainText);
domainText.setText("test");

它完美地工作。

但是,如果我尝试从我的主要活动类 (FragmentActivity) 启动的 DialogFragment 中修改这个非常 TextView 元素:

public class QueryDomainDialogFragment extends DialogFragment{

...

@Override
public Dialog onCreateDialog(Bundle savedInstanceState){

    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

    // Set the dialog title
    builder.setTitle(R.string.queryTypeDialogTitle)
           .setSingleChoiceItems(R.array.queryDomains, 0, new           DialogInterface.OnClickListener() {

               @Override
               public void onClick(DialogInterface dialog,int which){

                   ListView lw = ((AlertDialog)dialog).getListView();
                   Object selectedDomain = lw.getAdapter().getItem(lw.getCheckedItemPosition());

                   LayoutInflater inflater = getActivity().getLayoutInflater();
                   View view = inflater.inflate(R.layout.activity_search, null);
                   TextView domainText = (TextView) view.findViewById(R.id.domainText);

                   domainText.setText("test2");
               }
           })

什么都没发生。

我该怎么做?我做错了吗?不能从 DialogFragment 修改元素吗?我应该实现一种回调吗?

我想知道为什么不能从 DialogFragment 修改 TextView 等元素,如果是这样的话。

提前致谢。

4

1 回答 1

0

通过进行膨胀,您不再引用相同的文本视图,您需要设置完全相同的视图,而不是新的膨胀视图。您不能从对话框中引用文本视图,因为它不是其布局的一部分。

View view = inflater.inflate(R.layout.activity_search, null);
TextView domainText = (TextView) view.findViewById(R.id.domainText);

您需要创建一个侦听器,使您的活动实现此侦听器,并将其传递给对话框。

@Override
           public void onClick(DialogInterface dialog,int which){

               listener.setText("test2");
           }
于 2013-10-03T14:30:16.247 回答