Android 从片段外部更新dialogfragment视图
是否可以更新dialogfragment的任何视图,如父活动或片段的textview?我有一个progressdialog,一旦从服务加载了一些文本并显示在textview中,它就应该被取消 确实收到了数据,但progressdialog不会被取消,texview也不会显示 这是我的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 {
@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,但没有更新内容,为什么预期的行为没有发生。