我有一个带标签的活动,在这样的标签中 - recyclerview。当我点击recyclerview中的项目时,打开另一个(详细)活动。在详细的活动中我有"最喜欢"按钮,我想在适配器中发送布尔值。我的问题是:如何将数据从详细活动传递到recyclerview的适配器。问题是详细的活动没有适配器的实例,我没有设置自定义监听器到适配器。
我尝试实现接口
public interface OnFavoriteListener {
void changeIcon(int position, boolean favorite);
}
和覆盖方法onPause in detailed activity
@Override
public void onPause() {
super.onPause();
if (mFavoriteListener != null) {
mFavoriteListener.changeIcon(mPosition, mFavorite);
}
}
然后在我的适配器中实现监听器
@Override
public void changeIcon(int position, boolean favorite) {
mResource.get(position).setFavorite(favorite);
}
当我从详细活动返回到recyclerview时没有任何反应
答案 0 :(得分:0)
使用YourAppName创建一个应用程序类
public class YourAppName extends Application {
private static YourAppName mInstance;
private static ArrayList<YourModel> source; //This is your mSourceList
@Override
public void onCreate() {
super.onCreate();
setmInstance(this); //this is a setter for mInstance value
}
public static synchronized YourAppName getInstance() {
return mInstance;
}
public static void setmInstance(YourAppName mInstance) {
YourAppName.mInstance = mInstance;
}
在您的应用中创建此类并定义源值后;
在您的活动onCreate中调用此
YourAppName.getInstance().source = mSource;
并使用YourAppName.getInstance().source
设置您的recyclerView适配器,而不是使用mSource列表;
然后转到你的detailActivity onPause()
删除旧的interfaceMethod并写下此
YourAppName.getInstance.source.get(position).setFavorite(favorite);
在adapter.notifySetDataChanged()
onResume();
时
它适合你。
答案 1 :(得分:0)
首先,假设当您的“详细活动”弹出时,单击“收藏夹”将布尔值设置为“true”。所以在那之后,你将关闭你的“详细活动”,所以当你点击“收藏”时,你应该在你的“主要活动”中获得recyclerView并调用notifyItemChanged()在你的数据源中将你的值设置为“true”。您可以编写“get()”方法,将“recyclerView”置于“主要活动”中。