Java recyclerview在刷新时多次上载项目
我已经实现了一个recyclerview,我想在其中显示在应用程序中创建的组。现在,我正在使用Java recyclerview在刷新时多次上载项目,java,android,android-recyclerview,Java,Android,Android Recyclerview,我已经实现了一个recyclerview,我想在其中显示在应用程序中创建的组。现在,我正在使用swipeRefreshLayout刷新recyclerview,但每次我刷新recyclerview时,它都会根据刷新次数多次打印出同一组 有人能帮我解决这个问题吗 下面是代码 onCreateView方法: @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGrou
swipeRefreshLayout
刷新recyclerview,但每次我刷新recyclerview时,它都会根据刷新次数多次打印出同一组
有人能帮我解决这个问题吗
下面是代码
onCreateView方法:
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
Log.d(TAG, "onCreateView: started");
View view = inflater.inflate(R.layout.fragment_projects, container, false); //This inflates the project_fragment layout to this java class.
swipeRefreshLayout = view.findViewById(R.id.swipeRefresh);
add_btn = view.findViewById(R.id.add_project_btn);
add_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
requestNewGroup();
}
});
initRecyclerView(view);
recyclerUpdater();
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
recyclerUpdater();
swipeRefreshLayout.setRefreshing(false);
}
});
return view;
}
recyclerUpdate函数,其中字符串添加到recyclerView适配器:
private void recyclerUpdate() {
if(user != null) {
firebaseFirestore.collection("users").document(user.getUid()).collection("Groups").get()
.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
for (QueryDocumentSnapshot document : task.getResult()) {
String title = document.getString(TITLE);
String groupId = document.getString(GROUP_ID);
mProjects.add(title);
mProjectsId.add(groupId);
}
projectAdapter.setItems(mProjects, mProjectsId, getActivity());
projectAdapter.notifyDataSetChanged();
Log.d(TAG, "onComplete: list: " + mProjects.toString());
} else {
Log.d(TAG, "onComplete: error getting documents", task.getException());
}
}
});
}
}
private void recyclerUpdate(){
如果(用户!=null){
firebaseFirestore.collection(“users”).document(user.getUid()).collection(“Groups”).get()
.addOnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
对于(QueryDocumentSnapshot文档:task.getResult()){
字符串标题=document.getString(标题);
String groupId=document.getString(组ID);
M项目。添加(标题);
mProjectsId.add(groupId);
}
setItems(mProjects、mProjectsId、getActivity());
projectAdapter.notifyDataSetChanged();
Log.d(标记为“onComplete:list:”+mProjects.toString());
}否则{
d(标记“onComplete:获取文档时出错”,task.getException());
}
}
});
}
}
回收服务适配器:
public class groupView extends RecyclerView.Adapter<groupView.ViewHolder>{
private static final String TAG = groupView.class.getSimpleName();
private List<String> mItems = new ArrayList<>();
private List<String> mIds = new ArrayList<>();
private Context mContext;
public void setItems(List<String> items, List<String> ids, Context context) {
mItems = items;
mIds = ids;
mContext = context;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
if(viewType == 0){
return ViewHolder.inflate(parent);
}else{
return null;
}
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, final int position) {
Log.d(TAG, "onBindViewHolder: called");
if (holder instanceof ViewHolder) {
((ViewHolder) holder).bind(mItems.get(position));
((ViewHolder) holder).mLinearLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.d(TAG, "onClick: clicked on: " + mItems.get(position));
//Sending ID as an intent, to be used in the process
Intent intent = new Intent(mContext, projectClicked.class);
intent.putExtra("itemPos", mItems.get(position));
intent.putExtra("itemID", mIds.get(position));
//intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); //close activitys before calling a new
mContext.startActivity(intent);
}
});
}
}
@Override
public int getItemCount() {
return mItems.size();
}
@Override
public int getItemViewType(int position) {
return 0;
}
static class ViewHolder extends RecyclerView.ViewHolder{
private TextView mTextView;
private LinearLayout mLinearLayout;
public static ViewHolder inflate(ViewGroup parent) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_listitem_group, parent,false);
return new ViewHolder(view);
}
public ViewHolder(@NonNull View itemView) {
super(itemView);
mTextView = itemView.findViewById(R.id.list_groups_title);
mLinearLayout = itemView.findViewById(R.id.listitem_groups);
}
public void bind(String text){
mTextView.setText(text);
}
}
公共类groupView扩展了RecyclerView.Adapter{
私有静态最终字符串标记=groupView.class.getSimpleName();
private List mItems=new ArrayList();
private List mIds=new ArrayList();
私有上下文;
公共void集合项(列表项、列表ID、上下文){
mItems=项目;
mIds=ids;
mContext=上下文;
}
@非空
@凌驾
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent,int viewType){
如果(viewType==0){
返回视图支架。充气(父级);
}否则{
返回null;
}
}
@凌驾
public void onBindViewHolder(@NonNull ViewHolder,final int位置){
Log.d(标记“onBindViewHolder:called”);
if(视图保持架的保持架实例){
((ViewHolder)holder.bind(mItems.get(position));
((ViewHolder)holder.mLinearLayout.setOnClickListener(新视图.OnClickListener()){
@凌驾
公共void onClick(视图){
Log.d(标记“onClick:clicked:”+mItems.get(position));
//将ID作为意图发送,以便在流程中使用
意图=新意图(mContext,projectClicked.class);
intent.putExtra(“itemPos”,mItems.get(position));
intent.putExtra(“itemID”,mIds.get(position));
//intent.setFlags(intent.FLAG_ACTIVITY_CLEAR_TOP);//在调用新的
mContext.startActivity(意图);
}
});
}
}
@凌驾
public int getItemCount(){
返回mItems.size();
}
@凌驾
public int getItemViewType(int位置){
返回0;
}
静态类ViewHolder扩展了RecyclerView.ViewHolder{
私有文本视图mTextView;
私人线路布局;
公共静态视图固定器充气(视图组父视图){
View View=LayoutInflater.from(parent.getContext()).flate(R.layout.layout\u listitem\u组,parent,false);
返回新的ViewHolder(视图);
}
公共视图持有者(@NonNull View itemView){
超级(项目视图);
mTextView=itemView.findviewbyd(R.id.list\u groups\u title);
mLinearLayout=itemView.findviewbyd(R.id.listitem_组);
}
公共无效绑定(字符串文本){
mTextView.setText(文本);
}
}
}
提前谢谢你 您正在将新项目添加到
mProjects
和mProjectsId
中,但未清除这些列表。
在循环的之前添加clear()
:
if (task.isSuccessful()) {
mProjects.clear();
mProjectsId.clear();
for (QueryDocumentSnapshot document : task.getResult()) {
...