Java Firebase数据库设置收藏夹列表中的对象
我在清除碎片列表时遇到问题。我需要在发生片段更新时清除列表。我已经把它放在不同的地方,但它对我没有帮助 当更新发生在片段中时,它会显示相同的列表,但该列表也会添加上一个列表中的元素。如果我把Java Firebase数据库设置收藏夹列表中的对象,java,android,firebase,Java,Android,Firebase,我在清除碎片列表时遇到问题。我需要在发生片段更新时清除列表。我已经把它放在不同的地方,但它对我没有帮助 当更新发生在片段中时,它会显示相同的列表,但该列表也会添加上一个列表中的元素。如果我把list.clear();当它从firebase检索参数时,并没有给我所需的效果,当我将其放入onCreate()方法时,应用程序会给我错误 public class Favourite extends Fragment { private RecyclerView recyclerView; privat
list.clear()
;当它从firebase检索参数时,并没有给我所需的效果,当我将其放入onCreate()方法时,应用程序会给我错误
public class Favourite extends Fragment {
private RecyclerView recyclerView;
private ArrayList<TourReader1> artistList;
private ToursAdapter1 adapter1;
private DatabaseReference reference,reference2;
String uid;
public Favourite() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
mParam1 = getArguments().getString(ARG_PARAM1);
mParam2 = getArguments().getString(ARG_PARAM2);
}
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
//Get current user id
uid = user.getUid();
//Connect to specific point in database Tours
reference = FirebaseDatabase.getInstance().getReference("Tours");
//Create add to method valuelistener or reference which is specific point in database
reference2 = FirebaseDatabase.getInstance().getReference("user").child(uid);
reference.addValueEventListener(valueEventListener);
reference.keepSynced(true);
}
ValueEventListener valueEventListener = (new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot1) {
//get all information from specific point of database
for (DataSnapshot datasnapshot : snapshot1.getChildren()) {
//get current name of starting point from where we recive information from database
String firstname = datasnapshot.getKey();
//valuelistener for another point from database
reference2.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
for (DataSnapshot dSnapshot2:snapshot.getChildren()){
String seconame = dSnapshot2.getKey();
Boolean control = dSnapshot2.child("like").getValue(Boolean.class);
if(control != null&&firstname.equals(seconame) &&control.equals(true)) {
TourReader1 artist = datasnapshot.getValue(TourReader1.class);
artistList.add(artist);
}
}
adapter1.notifyDataSetChanged();
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
artistList = new ArrayList<>();
View rootview = inflater.inflate(R.layout.favourite, container, false);
recyclerView = rootview.findViewById(R.id.list);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
adapter1 = new ToursAdapter1(getContext(), artistList);
recyclerView.setAdapter(adapter1);
GridLayoutManager mGridLayoutManager = new GridLayoutManager(getContext(), 2);
recyclerView.setLayoutManager(mGridLayoutManager);
return rootview;
}
公共类扩展片段{
私人回收站;
私人阵列艺术家;
私人旅行车适配器1;
私有数据库参考,参考2;
字符串uid;
公众喜爱{
//必需的空公共构造函数
}
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
如果(getArguments()!=null){
mParam1=getArguments().getString(ARG_PARAM1);
mParam2=getArguments().getString(ARG_PARAM2);
}
FirebaseUser=FirebaseAuth.getInstance().getCurrentUser();
//获取当前用户id
uid=user.getUid();
//连接到数据库中的特定点
reference=FirebaseDatabase.getInstance().getReference(“Tours”);
//创建添加到方法valuelistener或引用,该方法是数据库中的特定点
reference2=FirebaseDatabase.getInstance().getReference(“用户”).child(uid);
addValueEventListener(valueEventListener);
参考。保持同步(真);
}
ValueEventListener ValueEventListener=(新的ValueEventListener(){
@凌驾
公共void onDataChange(@NonNull DataSnapshot snapshot1){
//从数据库的特定点获取所有信息
对于(DataSnapshot DataSnapshot:snapshot1.getChildren()){
//获取从数据库接收信息的起点的当前名称
String firstname=datasnapshot.getKey();
//数据库中另一个点的valuelistener
reference2.addValueEventListener(新的ValueEventListener(){
@凌驾
public void onDataChange(@NonNull DataSnapshot snapshot snapshot){
对于(DataSnapshot dSnapshot2:snapshot.getChildren()){
字符串seconame=dSnapshot2.getKey();
布尔控制=dSnapshot2.child(“like”).getValue(Boolean.class);
if(control!=null&&firstname.equals(seconame)&&control.equals(true)){
TourReader1 artist=datasnapshot.getValue(TourReader1.class);
艺术家。添加(艺术家);
}
}
adapter1.notifyDataSetChanged();
}
@凌驾
已取消公共void(@NonNull DatabaseError){
}
});
}
}
@凌驾
已取消的公共void(@NonNull DatabaseError DatabaseError){
}
});
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
//为该碎片膨胀布局
artistList=新的ArrayList();
视图根视图=充气机。充气(R.layout.favorite,container,false);
recyclerView=rootview.findviewbyd(R.id.list);
recyclerView.setHasFixedSize(true);
setLayoutManager(新的LinearLayoutManager(getContext());
adapter1=新ToursAdapter1(getContext(),artistList);
recyclerView.setAdapter(适配器1);
GridLayoutManager mGridLayoutManager=新的GridLayoutManager(getContext(),2);
recyclerView.setLayoutManager(mGridLayoutManager);
返回rootview;
}
}您应该在数据更改中的for循环之前使用artistList.clear()清除artistList,因为此列表正在触发上次回调的数据。好的,我自己找到了答案,我通过
tourlist清除适配器中的列表。清除(
)并删除用户点。保持同步(true)
;当like图标为false时
holder.sparkButton.setEventListener(new SparkEventListener() {
@Override
public void onEvent(ImageView button, boolean buttonState) {
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
String uid = user.getUid();
DatabaseReference userpoints = FirebaseDatabase.getInstance().getReference("user").child(uid);
ToursLike registerDatabase = new ToursLike(true);
if(buttonState){
userpoints.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (!dataSnapshot.hasChild(tour.Name)) {
userpoints.child(tour.Name).setValue(registerDatabase);
userpoints.keepSynced(true);
tourList.clear();
}
else{
userpoints.child(tour.Name).child("like").setValue(true);
userpoints.keepSynced(true);
tourList.clear();
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
else{
userpoints.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
userpoints.child(tour.Name).child("like").setValue(false);
tourList.clear();
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
}
@Override
public void onEventAnimationEnd(ImageView button, boolean buttonState) {
}
@Override
public void onEventAnimationStart(ImageView button, boolean buttonState) {
}
});
}
理解您的要求有点让人困惑,您能用非技术性的术语告诉我您期望的行为吗?我从firebase获取了一份巡更列表,并将其与另一个地方进行比较,如果用户是否喜欢此巡更。如果“喜欢”是真的,则此巡演转到“喜爱的巡演”列表。问题是当用户不喜欢最喜爱的旅游屏幕上的旅游列表更新,但也有以前列表中的元素时。我的问题是从ol元素中清除列表。你试过@dinkar_kumar answer吗?它能工作吗?不,我把它放在循环之前并添加adapter1.notifyDataSetChanged();但这不管用