从 DialogFragment 获取视图

Nos*_*lvi 8 java android

以这种方式实现了一个对话框片段:

public class ProgressFragment extends DialogFragment {

@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    View v = getActivity().getLayoutInflater().inflate(R.layout.installation_page, null);
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

    titleView = (TextView) v.findViewById(R.id.progressText);
    titleView.setText("progress");
    builder.setView(v);
    return builder.create();
}

 TextView titleView;

public TextView getTextView() {
    return titleView;
}
Run Code Online (Sandbox Code Playgroud)

并且我希望能够从调用它的任何地方更新 titleView 的内容。喜欢:

ProgressFragment progressFragment = new ProgressFragment();
progressFragment.show(getSupportFragmentManager(),"");
Run Code Online (Sandbox Code Playgroud)

问题是像这样的尝试者:

((TextView)progressFragment.getDialog().findViewById(R.id.progressText)).setText("text");
Run Code Online (Sandbox Code Playgroud)

progressFragment.getTextView().setText("text");
Run Code Online (Sandbox Code Playgroud)

((TextView)progressFragment.getView().findViewById(R.id.progressText)).setText("working in this place");
Run Code Online (Sandbox Code Playgroud)

都返回空值。我该怎么做呢。谢谢

Ell*_*ltz 3

不!不!不!

如果您使用以下命令创建 DialogFragment

 `Dialog onCreateDialog(Bundle savedInstanceState)`
Run Code Online (Sandbox Code Playgroud)

你的视图已经死了)因为你用对话框创建了它但不是

public View onCreateView(LayoutInflater inflater,ViewGroup
               container,Bundle savedInstanceState) {
Run Code Online (Sandbox Code Playgroud)

看看你的代码,我建议你使用第二种方法来创建 DialogFrament,因为你只是返回一个TextView 奶酪

但如果你坚持你的方法,那么你的解决方案会更长

progressFragment.getDialog().getWindow().getDecorView()
Run Code Online (Sandbox Code Playgroud)

装饰视图可能是你的TextView ,我不确定,但总的来说

 progressFragment.getDialog().getWindow().findViewById();
Run Code Online (Sandbox Code Playgroud)