PlaylistFragment
启动适配器:
playlistsAdapter = new PlaylistRecyclerAdapter(playlistsListArray, addToPlaylist, mSong, getActivity(), this);
PlaylistRecyclerAdapter
将数据绑定到PlaylistViewHolder
,如下所示:
((PlaylistViewHolder) viewHolder).bind(this, dataSet.get(position), addToPlaylist, mSong);
用户单击PlaylistViewHolder
中的项目:
context.startActivity(PublicPlaylistActivity.createStartIntent(context, playlist));
现在是一个问题,PublicPlaylistActivity
如何与最初的PlaylistFragment
对话?
答案 0 :(得分:0)
我建议您最好从片段到适配器使用 Interface 。因此,当用户单击适配器中的任何内容时,将在片段中调用函数实现。如果您需要进行活动以进行某些操作-应该从片段中调用(((YourActivity)getActivity())。someMethod()。
第二招正在使用广播接收器发送事件。有点复杂。您必须启动广播以查看您需要接收消息并从适配器发送这些消息。如果系统广泛分布,则这种方法更容易调试和支持,因此最好使用接口。
答案 1 :(得分:0)
我将通过接口执行一个通用的“上下文”类(ComContext)。当您创建片段时,您还将创建此类。从活动中,您可以检查它是否存在。
我假设您已经有一个带有静态变量的helper(AppHelper)类。
public class AppHelper {
public static ComContext comContext = null;
}
public class MainFragment {
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
ConContext comContext = new ComContext();
comContext.listener = this;
AppHelper.comContext = comContext;
}
@Override
public void onDataChanged() {
}
@Override
public void onDestroyView() {
super.onDestroyView();
AppHelper.comContext = null;
}
}
public class MainActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (AppHelper.comContext != null) {
AppHelper.comContext.listener.onDataChanged();
}
}
}
public class ComContext {
public interface HelperListener {
void onDataChanged();
}
public HelperListener listener = null;
}
答案 2 :(得分:0)
有几种方法可以做到这一点。最简单的方法应该是从PublicPlaylistActivity
开始startActivityForResult
。这样,活动结束,您可以设置将一些数据发送到调用方片段(在您的情况下为PlaylistFragment
)。这是有关实现的nice tutorial。
另一种方法是使用生命周期方法。您可能有一个public static
变量,可以跟踪从onResume
返回时在PlaylistFragment
的{{1}}函数中可能观察到的某些状态。您可以考虑以下示例实现。
在PublicPlaylistActivity
中定义一个public static
变量。然后在PlaylistFragment
函数中检查该变量的值并采取相应的措施。
onResume
现在,您可以实际在应用程序中的任何位置设置指标变量,这将对您的public static boolean someIndicator = false; // Initialize with a default value
@Override
protected void onResume() {
super.onResume();
if(someIndicator == true) doSomething();
else doSomethingElse();
}
产生影响。例如,在您的PlaylistFragment
中,您可以考虑做这样的事情。
PublicPlaylistActivity
实现同一目标的另一种方法是使用public void someFunctionInYourPublicPlaylistActivity() {
// ...
// Some code and then the following
PlaylistFragment.someIndicator = true;
}
。 Here is a tutorial讨论如何实施。
这实际上取决于您如何构建整个活动片段沟通。希望有帮助!