java - 删除按下后退按钮上的重复项目
问题描述
在我的应用程序中,我有 ViewPager 包含 3 个片段(主页、个人资料等)
Home Fragment 包含 RecyclerView。当我在片段之间导航时,它按预期工作。
但是,当我将 Home Fragment 导航到任何其他 Activity 时,Home RecyclerView 中的项目重复...
当我再次导航时,它再次重复
这是HomeFragment.java代码
public class Home extends Fragment {
public final ArrayList<MyActivityModel> mainPosts = new ArrayList<>();
public String UserID;
public RecyclerView mainRecyclerView;
public View v;
private LinearLayoutManager linearLayoutManager;
private PostAdapter mAdapter;
@Override
public View onCreateView(LayoutInflater layoutInflater, ViewGroup container, Bundle bundle) {
v = layoutInflater.inflate(R.layout.fragment_home, container, false);
mainRecyclerView = (RecyclerView) v.findViewById(R.id.MainRecyclerView);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity());
mainRecyclerView.setLayoutFrozen(false);
mainRecyclerView.setHasFixedSize(true);
mainRecyclerView.setNestedScrollingEnabled(false);
mainRecyclerView.setLayoutManager(linearLayoutManager);
mAdapter = new PostAdapter(mainPosts);
mainRecyclerView.setAdapter(mAdapter);
LoadPosts();
return v;
}
/**
* -----------------TODO: TO RECIEVE (educational level) Of current USER ----------
* -----------------TODO: to load posts first time...----------------
*/
public void LoadPosts() {
Query database = FirebaseDatabase.getInstance().getReference().child("Posts");
database.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot snapshot, @Nullable String previousChildName) {
if (snapshot.exists()) {
MyActivityModel post = snapshot.getValue(MyActivityModel.class);
mainPosts.add(0, post);
mAdapter.notifyDataSetChanged();
}
}
}
@Override
public void onChildChanged(@NonNull DataSnapshot snapshot, @Nullable String previousChildName) {
}
@Override
public void onChildRemoved(@NonNull DataSnapshot snapshot) {
}
@Override
public void onChildMoved(@NonNull DataSnapshot snapshot, @Nullable String previousChildName) {
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
@Override
public void onDestroy() {
super.onDestroy();
unbindDrawable(v.findViewById(R.id.homeFragment_all_linear));
System.gc();
}
private void unbindDrawable(View viewById) {
if (viewById.getBackground() != null) {
viewById.getBackground().setCallback(null);
}
if (viewById instanceof ViewGroup) {
for (int i = 0; i < ((ViewGroup) viewById).getChildCount(); i++) {
unbindDrawable(((ViewGroup) viewById).getChildAt(i));
}
((ViewGroup) viewById).removeAllViews();
}
}
}
这是带有 Home RecyclerView的PostAdapter 。
public class PostAdapter extends RecyclerView.Adapter<PostAdapter.PostViewHolder> {
ArrayList<MyActivityModel> mainPostList;
Context context;
public PostAdapter(ArrayList<MyActivityModel> mainPostList) {
this.mainPostList = mainPostList;
}
public void setItems(ArrayList<MyActivityModel> modelArrayList) {
int currentSize = mainPostList.size();
mainPostList.clear();
modelArrayList.addAll(modelArrayList);
notifyItemRangeRemoved(0, currentSize);
notifyItemRangeInserted(0, modelArrayList.size());
}
@NonNull
@Override
public PostViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.post_item, viewGroup, false);
context = viewGroup.getContext();
return new PostViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull final PostViewHolder holder, int i) {
// Stop recycling @Todo...
holder.setIsRecyclable(false);
MyActivityModel Post = mainPostList.get(i);
final String Postid = Post.getPostid();
final String post_Content = Post.getPost_content();
holder.setPost(Postid, post_Content);
}
@Override
public int getItemCount() {
return mainPostList.size();
}
@Override
public long getItemId(int position) {
return position;
}
class PostViewHolder extends RecyclerView.ViewHolder {
public TextView PostContent;
public PostViewHolder(@NonNull View itemView) {
super(itemView);
mView = itemView;
PostContent = mView.findViewById(R.id.post_Content);
}
public void setPost(String postId, String post_content) {
PostContent.setTect(post_content + "\n" + postId);
}
}
请任何人都可以帮助我如何防止这种重复。
如果您需要任何其他代码,请告诉我
解决方案
推荐阅读
- typescript - 将对象的值限制为标量
- css - 我可以在 eBay.co.uk 自定义描述中为列表使用外部 CSS 吗?
- unity3d - Google Daydream 智能手机作为控制器(统一蓝牙)
- r - 社区矩阵上的多元随机森林
- datagrip - 在 SQL Developer 中查看“其他用户”模式
- haskell - Haskell 使用 OverloadedStrings,但仍然出现 [Char] 错误
- perl - 如何在 YAML 中声明列表并使用 PERL YAML::XS 读取
- automation - 有人可以分享如何在任何地方自动化合并多个excel文件。我想创建自己的而不是使用机器人商店?
- python-3.x - 不可散列的类型:检查密钥是否存在时出现“dict”错误
- javascript - 您可以有条件地运行 if 语句的一部分吗?