Android 从片段外部更新dialogfragment视图

Android 从片段外部更新dialogfragment视图,android,android-fragments,android-dialogfragment,event-bus,greenrobot-eventbus,Android,Android Fragments,Android Dialogfragment,Event Bus,Greenrobot Eventbus,是否可以更新dialogfragment的任何视图,如父活动或片段的textview?我有一个progressdialog,一旦从服务加载了一些文本并显示在textview中,它就应该被取消 确实收到了数据,但progressdialog不会被取消,texview也不会显示 这是我的dialogfragment代码: @SuppressLint("ValidFragment") public class ArtistInfoDialog extends DialogFragment {

是否可以更新dialogfragment的任何视图,如父活动或片段的textview?我有一个progressdialog,一旦从服务加载了一些文本并显示在textview中,它就应该被取消

确实收到了数据,但progressdialog不会被取消,texview也不会显示

这是我的dialogfragment代码:

@SuppressLint("ValidFragment")
public class ArtistInfoDialog extends DialogFragment {

    ImageButton close;
    TextView title;
    TextView artist;
    ImageView art;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.artist_info_layout, container, false);

        artistInfo = (TextView) view.findViewById(R.id.artist_info);
        close = (ImageButton) view.findViewById(R.id.close);
        loadingIndicator = (AVLoadingIndicatorView) view.findViewById(R.id.loadingIndicator);
        title = (TextView) view.findViewById(R.id.title);
        artist = (TextView) view.findViewById(R.id.artist);
        art = (ImageView) view.findViewById(R.id.art);

        Track track = NakedGroove.getCurrentPlaylist().get(NakedGroove.getCurrentIndex());

        title.setText(track.getTitle());
        artist.setText(track.getArtist());

        if (!track.getImages().isEmpty())
            Picasso.with(getActivity()).load(track.getMediumImage()).fit().centerCrop().error(R.drawable.no_cover).placeholder(R.drawable.no_cover).into(art);
        else
            Picasso.with(getActivity()).load(R.drawable.no_cover).fit().centerCrop().into(art);

        close.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dismiss();
            }
        });

        getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);

        return view;
    }
}
EventBus代码如下所示:

  @Subscribe(threadMode = ThreadMode.MAIN)
public void onEvent(ArtistMetadataEvent metadataEvent) {
    String info = metadataEvent.bio;

    if (artistInfoDialog != null) {
        loadingIndicator.setVisibility(View.GONE);
        artistInfo.setVisibility(View.VISIBLE);

        if (!TextUtils.isEmpty(info)) {
            artistInfo.setText(info);
        } else {
            artistInfo.setText("Artist information unavailable");
        }
    }
}

您应该能够通过接口或事件总线的某些实现来实现这一点。我正在使用事件总线从服务接收结果并设置文本。让我尝试一下接口方法。没有代码,我几乎可以提供帮助。Eventbus可能是一种更好的方法,因为它比接口更“解耦”。我看不出有什么理由它不起作用。也许您遗漏了一个小细节?您何时以及如何将dialogfragment订阅到eventbus?如果此订阅发生在从服务加载文本之后,则将永远不会调用您的
onEvent
方法,因为事件不是粘性的。您可能应该进行调试,以查看对话框是否实际接收到事件。这也将使您更好地了解,如果确实在onstart方法上接收到事件,那么为什么预期的行为没有发生?我在onstart方法上将dialogfragment订阅到eventbus,但它没有更新内容。您应该能够通过接口或事件总线的某些实现来实现这一点。我正在使用eventbus从服务接收结果并设置文本。让我尝试一下接口方法。没有代码,我几乎可以提供帮助。Eventbus可能是一种更好的方法,因为它比接口更“解耦”。我看不出有什么理由它不起作用。也许您遗漏了一个小细节?您何时以及如何将dialogfragment订阅到eventbus?如果此订阅发生在从服务加载文本之后,则将永远不会调用您的
onEvent
方法,因为事件不是粘性的。您可能应该进行调试,以查看对话框是否实际接收到事件。这还将使您更好地了解,如果确实在onstart方法上接收到eventI订阅的dialogfragment到eventbus,但没有更新内容,为什么预期的行为没有发生。