我已经阅读了很多关于这个问题的内容,但我不能让我的案子工作。
我在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等元素,如果是这样的话。
提前致谢。
答案 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");
}