在我的主要活动中,我有两个片段。一个是歌曲列表,第二个是收藏。这两个片段都包含ListView和自定义适配器。底部有一个按钮。当单击该按钮时,该歌曲将被添加到收藏夹(第二个片段)。我可以将歌曲添加到片段收藏夹中,但是当我们添加它时它不会显示。我们必须重新启动应用程序以使其成为最喜欢的。添加收藏夹的按钮是从主要活动开始操作的。有什么方法可以通知我的适配器状态已被更改。(添加到最喜欢的使用数据库的歌曲)
有什么办法可以在打开片段时刷新片段吗?
这是主要活动的代码,其中收藏夹是在点击时在数据库中添加歌曲名称的按钮。
favourite.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(x==0) {
favourite.setImageResource(R.drawable.ic_favorite);x=1;
boolean isinserted =
mydb.insertdata(collections.get(a).getsong().toString());
if (isinserted == true) {
Toast.makeText(MainActivity.this, "Added as favorite", Toast.LENGTH_LONG).show();
x=1;
}
else
{
Toast.makeText(MainActivity.this, "data not inserted", Toast.LENGTH_LONG).show();
}
}
else{favourite.setImageResource(R.drawable.ic_favorite_border);
int deletedrow = mydb.deleteData(collections.get(a).getsong());
if(deletedrow>0){Toast.makeText(MainActivity.this, "removed from favorite", Toast.LENGTH_LONG).show();
finish();
startActivity(getIntent());
x=0;
}
else {Toast.makeText(MainActivity.this, " not removed from favorite", Toast.LENGTH_LONG).show();
}
}
}
});
答案 0 :(得分:0)
您应该从适配器中调用notifyDataSetChanged()
,如下所示:
yourAdapter.notifyDataSetChanged();
答案 1 :(得分:0)
使用新添加的项目更新列表并调用
adapter.notifyDataSetChanged();
答案 2 :(得分:0)
将此项用于项目点击以添加到列表中:
public Both[] boths;
public ArrayList<Both> both = new ArrayList<Both>();
onItemClick:
String itemValue = (String) listview.getItemAtPosition(i);
if (boths == null) {
boths = new Both[]{ \\Both is your Object Class name
new Both(itemValue)
};
}
both.addAll(Arrays.asList(boths));
adapters.notifyDataSetChanged(); \\adapters is your Adapter Name
adapters.setAdapter(both);
答案 3 :(得分:0)
据我所知,你有两个片段。这是一个解决方案如下:
第1步: 您可以定义两种方法来更新两个片段中的适配器!
SongFragment:
public void updateDataList(){
if(songAdapter != null){
songAdapter.notifyDataSetChanged();
}
}
FavoriteFragment:
public void updateDataList(){
if(favoriteAdapter != null){
favoriteAdapter.notifyDataSetChanged();
}
}
第2步: 当您想要更新视图时,您的MainActivity必须持有SongFragment和FavoriteFragment实例。 您可以在MainActivity中调用方法updateDataList。例如:
songFragment.updateDataList();
favoriteFragment.updateDataList();
答案 4 :(得分:0)
如果要从数据库中检索数据,还需要更新您的片段,您需要更新光标或列表,您可以使用此方法在片段上检查此片段,或者您可以使用侦听器来监听添加的fav事件。
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser) {
}else{
// fragment is no longer visible
}
}
答案 5 :(得分:0)
如果有人想要,我解决了。
点击按钮时我使用了广播。那个广播将以片段形式收到。在收件人中,我已清除列表,然后再次添加列表。现在,如果状态已更改,则会通知适配器