Android SDK:无法从DialogFragment修改TextView

时间:2013-10-03 14:28:07

标签: android

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

我在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等元素,如果是这样的话。

提前致谢。

1 个答案:

答案 0 :(得分:0)

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

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