Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android RecyclerView中的项目正在重复_Android_Android Recyclerview - Fatal编程技术网

Android RecyclerView中的项目正在重复

Android RecyclerView中的项目正在重复,android,android-recyclerview,Android,Android Recyclerview,我正在做一个Android项目,在这个项目中我使用了RecyclerView。“回收器”视图中的项目计数正确,但在某个时间间隔后,项目会重复。我已经在互联网上找到了解决方案,并尝试使用它们,但对我没有帮助 片段的Java代码如下: package com.example.laundry1app; import android.content.Intent; import android.os.Bundle; import android.support.annotation.NonNull;

我正在做一个Android项目,在这个项目中我使用了RecyclerView。“回收器”视图中的项目计数正确,但在某个时间间隔后,项目会重复。我已经在互联网上找到了解决方案,并尝试使用它们,但对我没有帮助

片段的Java代码如下:

package com.example.laundry1app;

import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.design.widget.FloatingActionButton;
import android.support.v4.app.Fragment;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import android.widget.ProgressBar;
import android.widget.TextView;


import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;

import java.util.ArrayList;
import java.util.Objects;
public class AllProductsFragment extends Fragment {
    private ProgressBar progress;
    private ArrayList<AllProductsData> data;
    private TextView products;
    private View view;
    private RecyclerView recyclerView;
    private FloatingActionButton add, cart;
    private boolean flag;
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        view = inflater.inflate(R.layout.fragment_all_products, container, false);
        progress = view.findViewById(R.id.progress);
        progress.setVisibility(View.VISIBLE);
        add = view.findViewById(R.id.add);
        cart = view.findViewById(R.id.cart);
        if (FirebaseAuth.getInstance().getCurrentUser() != null) {
            DatabaseReference reference = FirebaseDatabase.getInstance().getReference("admins");
            reference.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                    for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                        if (Objects.equals(snapshot.child("email").getValue(String.class), FirebaseAuth.getInstance().getCurrentUser().getEmail())) {
                            flag = true;
                            add.show();
                            add.setEnabled(true);
                            cart.hide();
                            cart.setEnabled(false);
                            add.setOnClickListener(new View.OnClickListener() {
                                @Override
                                public void onClick(View v) {
                                    if (getFragmentManager() != null) {
                                        startActivity(new Intent(getContext(), AddProductActivity.class));
                                        Objects.requireNonNull(getActivity()).finish();
                                    }
                                }
                            });
                            break;
                        }
                    }
                    if (!flag) {
                        add.hide();
                        add.setEnabled(false);
                        cart.show();
                        cart.setEnabled(true);
                        cart.setOnClickListener(new View.OnClickListener() {
                            @Override
                            public void onClick(View v) {
                                startActivity(new Intent(getContext(), CartActivity.class));
                                Objects.requireNonNull(getActivity()).finish();
                            }
                        });
                    }
                }

                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) {
                }
            });
        }
        products = view.findViewById(R.id.products);
        data = new ArrayList<>();
        DatabaseReference reference = FirebaseDatabase.getInstance().getReference("products");
        reference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                data.clear();
                for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                    data.add(new AllProductsData(snapshot.child("english").getValue(String.class), snapshot.child("url").getValue(String.class)));

                }
                progress.setVisibility(View.GONE);
                if (data.isEmpty()) {
                    products.setVisibility(View.VISIBLE);
                } else {
                    products.setVisibility(View.GONE);
                }//
                recyclerView = view.findViewById(R.id.recyclerView);
                recyclerView.setHasFixedSize(true);
                recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
                recyclerView.setAdapter(new AllProductsAdapter(data));
            }
            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
            }
        });
        return view;
    }
}
适配器的Java代码如下:

package com.example.laundry1app;

import android.annotation.SuppressLint;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

import com.bumptech.glide.Glide;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;

import java.util.ArrayList;
import java.util.Objects;

class AllProductsAdapter extends RecyclerView.Adapter<com.example.laundry1app.AllProductsAdapter.ViewHolder> {
    private ArrayList<AllProductsData> data;
    private DatabaseReference reference, databaseReference;
    private boolean flag;
    private Double p;
    AllProductsAdapter(ArrayList<AllProductsData> data) {
        setHasStableIds(true);
        this.data = data;
    }
    @Override
    public long getItemId(int position) {
        return super.getItemId(position);
    }
    @Override
    public int getItemViewType(int position) {
        return super.getItemViewType(position);
    }
    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        return new ViewHolder(LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.list_products, viewGroup, false));
    }
    @Override
    public void onBindViewHolder(@NonNull final ViewHolder viewHolder, @SuppressLint("RecyclerView") final int i) {
        viewHolder.english.setText(data.get(i).getEnglish());
        viewHolder.quantity.setText(viewHolder.quantity.getText().toString());
        GlideApp.with(viewHolder.image.getContext()).load(data.get(i).getUrl()).into(viewHolder.image);

        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(viewHolder.spinner.getContext(),R.array.Services, android.R.layout.simple_spinner_item);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        viewHolder.spinner.setAdapter(adapter);

        if (FirebaseAuth.getInstance().getCurrentUser() != null) {
            reference = FirebaseDatabase.getInstance().getReference("admins");
            reference.addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                    for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                        if (Objects.equals(snapshot.child("email").getValue(String.class), FirebaseAuth.getInstance().getCurrentUser().getEmail())) {
                            flag = true;
                            viewHolder.add.setEnabled(false);
                            viewHolder.add.setVisibility(View.GONE);
                            viewHolder.quantity.setEnabled(false);
                            viewHolder.quantity.setVisibility(View.GONE);
                            viewHolder.spinner.setEnabled(false);
                            viewHolder.spinner.setVisibility(View.GONE);

                            break;
                        }
                    }
                    if (!flag) {
                        viewHolder.add.setEnabled(true);
                        viewHolder.add.setVisibility(View.VISIBLE);
                        reference = FirebaseDatabase.getInstance().getReference("users/" + FirebaseAuth.getInstance().getCurrentUser().getUid() + "/cart");
                        reference.addValueEventListener(new ValueEventListener() {
                            @Override
                            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                                for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                                    if (Objects.equals(snapshot.child("english").getValue(), data.get(i).getEnglish())  && Objects.equals(snapshot.child("quantity").getValue(String.class), viewHolder.quantity.getText().toString())) {
                                        viewHolder.add.setEnabled(false);
                                        viewHolder.add.setText(R.string.added);
                                    }
                                }
                            }

                            @Override
                            public void onCancelled(@NonNull DatabaseError databaseError) {
                            }
                        });
                        viewHolder.add.setOnClickListener(new View.OnClickListener() {
                            @Override
                            public void onClick(View v) {
                                if (viewHolder.english.length() == 0 ) {
                                    viewHolder.english.requestFocus();
                                    viewHolder.english.setError("This Is A Required Field");
                                } else if (viewHolder.spinner.getSelectedItem() == "Wash" || viewHolder.spinner.getSelectedItem() == "Laundry" || viewHolder.spinner.getSelectedItem() == "Steam Press" || viewHolder.spinner.getSelectedItem() == "Wash + Steam Press"){
                                    viewHolder.spinner.requestFocus();
                                    Toast.makeText(viewHolder.spinner.getContext(), "Select a service", Toast.LENGTH_SHORT).show();
                                }else {
                                    databaseReference = reference.push();
                                    databaseReference.child("english").setValue(data.get(i).getEnglish());
                                    databaseReference.child("quantity").setValue(viewHolder.quantity.getText().toString());
                                    databaseReference.child("image").setValue(data.get(i).getUrl());
                                    databaseReference.child("service").setValue(viewHolder.spinner.getSelectedItem().toString());
                                    if (viewHolder.spinner.getSelectedItem().toString().equals("Wash")) {
                                        p = Double.parseDouble(viewHolder.quantity.getText().toString()) * 5;

                                    } else if (viewHolder.spinner.getSelectedItem().toString().equals("Laundry")) {
                                        p = Double.parseDouble(viewHolder.quantity.getText().toString()) * 8;

                                    } else if (viewHolder.spinner.getSelectedItem().toString().equals("Steam Press")) {
                                        p = Double.parseDouble(viewHolder.quantity.getText().toString()) * 3;

                                    } else if (viewHolder.spinner.getSelectedItem().toString().equals("Wash + Steam Press")) {
                                        p = Double.parseDouble(viewHolder.quantity.getText().toString()) * 7;

                                    }
                                    databaseReference.child("price").setValue(p);
                                }

                            }
                        });
                    }
                }

                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) {
                }
            });
        }
    }
    @Override
    public int getItemCount() {
        return data.size();
    }
    class ViewHolder extends RecyclerView.ViewHolder {
        private TextView english, quantity;
        private Button add;
        Spinner spinner;
        private ImageView image;
        ViewHolder(View itemView) {
            super(itemView);
            this.english = itemView.findViewById(R.id.english);
            this.quantity = itemView.findViewById(R.id.quantity);
            this.add = itemView.findViewById(R.id.add);
            this.spinner = itemView.findViewById(R.id.typeof_service);
            this.image = itemView.findViewById(R.id.img);
        }
    }
}
package com.example.laundryapp;
导入android.annotation.SuppressLint;
导入android.support.annotation.NonNull;
导入android.support.v7.widget.RecyclerView;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.ArrayAdapter;
导入android.widget.Button;
导入android.widget.ImageView;
导入android.widget.Spinner;
导入android.widget.TextView;
导入android.widget.Toast;
导入com.bumptech.glide.glide;
导入com.google.firebase.auth.FirebaseAuth;
导入com.google.firebase.database.DataSnapshot;
导入com.google.firebase.database.DatabaseError;
导入com.google.firebase.database.DatabaseReference;
导入com.google.firebase.database.FirebaseDatabase;
导入com.google.firebase.database.ValueEventListener;
导入java.util.ArrayList;
导入java.util.Objects;
类AllProductsAdapter扩展了RecyclerView.Adapter{
私有数组列表数据;
私有数据库引用,数据库引用;
私有布尔标志;
私人双p;
AllProductsAdapter(ArrayList数据){
setHasStableIds(true);
这个数据=数据;
}
@凌驾
公共长getItemId(int位置){
返回super.getItemId(位置);
}
@凌驾
public int getItemViewType(int位置){
返回super.getItemViewType(位置);
}
@非空
@凌驾
public ViewHolder onCreateViewHolder(@NonNull ViewGroup ViewGroup,int i){
返回新的ViewHolder(LayoutInflater.from(viewGroup.getContext())。充气(R.layout.list_products,viewGroup,false));
}
@凌驾
public void onBindViewHolder(@NonNull final ViewHolder ViewHolder,@SuppressLint(“RecyclerView”)final int i){
viewHolder.english.setText(data.get(i.getEnglish());
viewHolder.quantity.setText(viewHolder.quantity.getText().toString());
GlideApp.with(viewHolder.image.getContext()).load(data.get(i.getUrl()).into(viewHolder.image));
ArrayAdapter=ArrayAdapter.createFromResource(viewHolder.spinner.getContext(),R.array.Services,android.R.layout.simple\u spinner\u项);
setDropDownViewResource(android.R.layout.simple\u微调器\u下拉菜单\u项);
viewHolder.spinner.setAdapter(适配器);
如果(FirebaseAuth.getInstance().getCurrentUser()!=null){
reference=FirebaseDatabase.getInstance().getReference(“管理员”);
reference.addListenerForSingleValueEvent(新的ValueEventListener()){
@凌驾
public void onDataChange(@NonNull DataSnapshot DataSnapshot){
对于(DataSnapshot快照:DataSnapshot.getChildren()){
if(Objects.equals(snapshot.child(“email”).getValue(String.class)、FirebaseAuth.getInstance().getCurrentUser().getEmail()){
flag=true;
viewHolder.add.setEnabled(false);
viewHolder.add.setVisibility(View.GONE);
viewHolder.quantity.setEnabled(假);
viewHolder.quantity.setVisibility(View.GONE);
viewHolder.spinner.setEnabled(false);
viewHolder.spinner.setVisibility(View.GONE);
打破
}
}
如果(!标志){
viewHolder.add.setEnabled(true);
viewHolder.add.setVisibility(View.VISIBLE);
reference=FirebaseDatabase.getInstance().getReference(“用户/”+FirebaseAuth.getInstance().getCurrentUser().getUid()+“/cart”);
addValueEventListener(新的ValueEventListener(){
@凌驾
public void onDataChange(@NonNull DataSnapshot DataSnapshot){
对于(DataSnapshot快照:DataSnapshot.getChildren()){
if(Objects.equals(snapshot.child(“english”).getValue()、data.get(i).getEnglish())和&Objects.equals(snapshot.child(“数量”).getValue(String.class)、viewHolder.quantity.getText().toString()){
viewHolder.add.setEnabled(false);
viewHolder.add.setText(R.string.added);
}
}
}
@凌驾
已取消的公共void(@NonNull DatabaseError DatabaseError){
}
});
viewHolder.add.setOnClickListener(new View.OnClickListener()){
@凌驾
公共void onClick(视图v){
if(viewHolder.english.length()=0){
viewHolder.english.requestFocus();
viewHolder.english.setError(“这是必填字段”);
}else if(viewHolder.spinner.getSelectedItem()=“清洗”| | viewHolder.spinner.getSelectedItem()=“洗衣房”| | | viewHolder.spinner.getSelectedItem()=“蒸汽压榨”| viewHolder.spinner.getSelectedItem()=“清洗+蒸汽压榨”){
viewHolder.spinner.requestFocus();
Toast.makeText(viewHolder.spinner.getContext(),“选择服务”,Toast.LENGTH\u SHORT.show();
}否则{
package com.example.laundry1app;

import android.annotation.SuppressLint;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

import com.bumptech.glide.Glide;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;

import java.util.ArrayList;
import java.util.Objects;

class AllProductsAdapter extends RecyclerView.Adapter<com.example.laundry1app.AllProductsAdapter.ViewHolder> {
    private ArrayList<AllProductsData> data;
    private DatabaseReference reference, databaseReference;
    private boolean flag;
    private Double p;
    AllProductsAdapter(ArrayList<AllProductsData> data) {
        setHasStableIds(true);
        this.data = data;
    }
    @Override
    public long getItemId(int position) {
        return super.getItemId(position);
    }
    @Override
    public int getItemViewType(int position) {
        return super.getItemViewType(position);
    }
    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        return new ViewHolder(LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.list_products, viewGroup, false));
    }
    @Override
    public void onBindViewHolder(@NonNull final ViewHolder viewHolder, @SuppressLint("RecyclerView") final int i) {
        viewHolder.english.setText(data.get(i).getEnglish());
        viewHolder.quantity.setText(viewHolder.quantity.getText().toString());
        GlideApp.with(viewHolder.image.getContext()).load(data.get(i).getUrl()).into(viewHolder.image);

        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(viewHolder.spinner.getContext(),R.array.Services, android.R.layout.simple_spinner_item);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        viewHolder.spinner.setAdapter(adapter);

        if (FirebaseAuth.getInstance().getCurrentUser() != null) {
            reference = FirebaseDatabase.getInstance().getReference("admins");
            reference.addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                    for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                        if (Objects.equals(snapshot.child("email").getValue(String.class), FirebaseAuth.getInstance().getCurrentUser().getEmail())) {
                            flag = true;
                            viewHolder.add.setEnabled(false);
                            viewHolder.add.setVisibility(View.GONE);
                            viewHolder.quantity.setEnabled(false);
                            viewHolder.quantity.setVisibility(View.GONE);
                            viewHolder.spinner.setEnabled(false);
                            viewHolder.spinner.setVisibility(View.GONE);

                            break;
                        }
                    }
                    if (!flag) {
                        viewHolder.add.setEnabled(true);
                        viewHolder.add.setVisibility(View.VISIBLE);
                        reference = FirebaseDatabase.getInstance().getReference("users/" + FirebaseAuth.getInstance().getCurrentUser().getUid() + "/cart");
                        reference.addValueEventListener(new ValueEventListener() {
                            @Override
                            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                                for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                                    if (Objects.equals(snapshot.child("english").getValue(), data.get(i).getEnglish())  && Objects.equals(snapshot.child("quantity").getValue(String.class), viewHolder.quantity.getText().toString())) {
                                        viewHolder.add.setEnabled(false);
                                        viewHolder.add.setText(R.string.added);
                                    }
                                }
                            }

                            @Override
                            public void onCancelled(@NonNull DatabaseError databaseError) {
                            }
                        });
                        viewHolder.add.setOnClickListener(new View.OnClickListener() {
                            @Override
                            public void onClick(View v) {
                                if (viewHolder.english.length() == 0 ) {
                                    viewHolder.english.requestFocus();
                                    viewHolder.english.setError("This Is A Required Field");
                                } else if (viewHolder.spinner.getSelectedItem() == "Wash" || viewHolder.spinner.getSelectedItem() == "Laundry" || viewHolder.spinner.getSelectedItem() == "Steam Press" || viewHolder.spinner.getSelectedItem() == "Wash + Steam Press"){
                                    viewHolder.spinner.requestFocus();
                                    Toast.makeText(viewHolder.spinner.getContext(), "Select a service", Toast.LENGTH_SHORT).show();
                                }else {
                                    databaseReference = reference.push();
                                    databaseReference.child("english").setValue(data.get(i).getEnglish());
                                    databaseReference.child("quantity").setValue(viewHolder.quantity.getText().toString());
                                    databaseReference.child("image").setValue(data.get(i).getUrl());
                                    databaseReference.child("service").setValue(viewHolder.spinner.getSelectedItem().toString());
                                    if (viewHolder.spinner.getSelectedItem().toString().equals("Wash")) {
                                        p = Double.parseDouble(viewHolder.quantity.getText().toString()) * 5;

                                    } else if (viewHolder.spinner.getSelectedItem().toString().equals("Laundry")) {
                                        p = Double.parseDouble(viewHolder.quantity.getText().toString()) * 8;

                                    } else if (viewHolder.spinner.getSelectedItem().toString().equals("Steam Press")) {
                                        p = Double.parseDouble(viewHolder.quantity.getText().toString()) * 3;

                                    } else if (viewHolder.spinner.getSelectedItem().toString().equals("Wash + Steam Press")) {
                                        p = Double.parseDouble(viewHolder.quantity.getText().toString()) * 7;

                                    }
                                    databaseReference.child("price").setValue(p);
                                }

                            }
                        });
                    }
                }

                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) {
                }
            });
        }
    }
    @Override
    public int getItemCount() {
        return data.size();
    }
    class ViewHolder extends RecyclerView.ViewHolder {
        private TextView english, quantity;
        private Button add;
        Spinner spinner;
        private ImageView image;
        ViewHolder(View itemView) {
            super(itemView);
            this.english = itemView.findViewById(R.id.english);
            this.quantity = itemView.findViewById(R.id.quantity);
            this.add = itemView.findViewById(R.id.add);
            this.spinner = itemView.findViewById(R.id.typeof_service);
            this.image = itemView.findViewById(R.id.img);
        }
    }
}
public class AllProductsData {
    private int id;
    private String english, url;
    //...
@Override
public long getItemId(int position) {
    return data[position].id;
}