【问题标题】:I am loading image to tab3 but when sliding my tab recycle view items increased when I come back to first tab我正在将图像加载到选项卡 3,但是当我回到第一个选项卡时滑动选项卡时,recyclerview 项目增加了
【发布时间】:2017-12-06 16:35:09
【问题描述】:

我也尝试更改 setHasFixsize(true) 但它不起作用 问题是当我进入我自己的标签时,标签的项目增加了一倍 三倍等 有内容片段 mtabfragment 的活动我已经创建了三个片段 java 文件到三个选项卡布局并与这三个活动连接

`public class NewsFeeds extends Fragment {

DatabaseReference databaseReference;
private LinearLayoutManager layoutManager;

RecyclerView recyclerView;


RecyclerView.Adapter adapter ;


ProgressDialog progressDialog;


List<ImageUploadInfo> list = new ArrayList<>();


Context context,contextpuja ;
GridView gridViewPuja,gridViewAll,gridViewC;
View view;

public NewsFeeds() {

}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    context = getActivity();

    view = inflater.inflate(R.layout.fragment_news_feeds2,container, false);

    return view;
}



@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    final FragmentActivity fragmentActivity = getActivity();
    layoutManager = new LinearLayoutManager(fragmentActivity);

    recyclerView =  view.findViewById(R.id.recyclerView);


    recyclerView.setLayoutManager(layoutManager);
    recyclerView.setHasFixedSize(true);
    progressDialog = new ProgressDialog(getActivity());


    progressDialog.setMessage("Loading Images From Firebase.");

     progressDialog.show();


    databaseReference = FirebaseDatabase.getInstance().getReference(Main2Activity.FB_Database_Path);


    databaseReference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot snapshot) {

            for (DataSnapshot postSnapshot : snapshot.getChildren()) {

                ImageUploadInfo imageUploadInfo = postSnapshot.getValue(ImageUploadInfo.class);

                list.add(imageUploadInfo);
            }

            adapter = new RecyclerViewAdapter(getContext(), list);

            recyclerView.setAdapter(adapter);
            recyclerView.setHasFixedSize(true);

            progressDialog.dismiss();
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

                          progressDialog.dismiss();

        }
    });








}

}

【问题讨论】:

  • 做 list.clear();
  • 我申请 list.clear();返回视图之前的代码并且它正在工作
  • 很高兴我能帮上忙
  • 感谢您的回答是完美的,但在那个位置代码不起作用我已将其更改为在代码中提及位置并且它正在工作

标签: android firebase android-fragments tabs


【解决方案1】:

您已经在开始时初始化了您的列表。因此,在每次 api 调用之后,都会将新项目添加到其中。为避免这种情况,您添加此行 list.clear(); 在这条线之前 适配器 = 新的 RecyclerViewAdapter(getContext(), 列表); 或之前不要初始化您的列表。放新的 ArrayList();在 onDataChange 方法中。

【讨论】:

    【解决方案2】:

    你可以这样做 在您的 RecyclerViewAdapter 类中创建一个方法,如 setData(传递您的列表)并将数据设置为在您的 RecyclerViewAdapter 类中列出;

    public class NewsFeeds extends Fragment {
    
    DatabaseReference databaseReference;
    private LinearLayoutManager layoutManager;
    
    RecyclerView recyclerView;
    
    
    RecyclerView.Adapter adapter ;
    
    
    ProgressDialog progressDialog;
    
    
    List<ImageUploadInfo> list = new ArrayList<>();
    
    
    Context context,contextpuja ;
    GridView gridViewPuja,gridViewAll,gridViewC;
    View view;
    
    public NewsFeeds() {
    
    }
    
    
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
    
        context = getActivity();
    
        view = inflater.inflate(R.layout.fragment_news_feeds2,container, false);
        adapter = new RecyclerViewAdapter(getContext(), list);
    
        return view;
    }
    
    
    
    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        final FragmentActivity fragmentActivity = getActivity();
        layoutManager = new LinearLayoutManager(fragmentActivity);
    
        recyclerView =  view.findViewById(R.id.recyclerView);
    
    
        recyclerView.setLayoutManager(layoutManager);
        recyclerView.setHasFixedSize(true);
        progressDialog = new ProgressDialog(getActivity());
    
    
        progressDialog.setMessage("Loading Images From Firebase.");
    
         progressDialog.show();
    
    
        databaseReference = FirebaseDatabase.getInstance().getReference(Main2Activity.FB_Database_Path);
    
    
        databaseReference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot snapshot) {
    
                for (DataSnapshot postSnapshot : snapshot.getChildren()) {
    
                    ImageUploadInfo imageUploadInfo = 
                     postSnapshot.getValue(ImageUploadInfo.class);
    
                  list.add(imageUploadInfo);
                }
    
    
                 adpter.setData(list);
                recyclerView.setAdapter(adapter);
                adapter.notifyDataSetChanged();
    
             progressDialog.dismiss();
            }
    
            @Override
            public void onCancelled(DatabaseError databaseError) {
    
                              progressDialog.dismiss();
    
            }
        });
    

    【讨论】:

    • public void setData(List imageUploadInfo) { this.imageUploadInfo= imageUploadInfo; }
    【解决方案3】:

    我刚刚在返回视图之前使用代码list.clear()添加代码并获得完美的输出

    public class NewsFeeds extends Fragment {
    
    DatabaseReference databaseReference;
    private LinearLayoutManager layoutManager;
    
    RecyclerView recyclerView;
    
    
    RecyclerView.Adapter adapter ;
    
    
    ProgressDialog progressDialog;
    
    
    List<ImageUploadInfo> list = new ArrayList<>();
    
    
    Context context,contextpuja ;
    GridView gridViewPuja,gridViewAll,gridViewC;
    View view;
    
    public NewsFeeds() {
    
    }
    
    
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
    
        context = getActivity();
    
        view = inflater.inflate(R.layout.fragment_news_feeds2,container, false);
    
        //-----list.clear()-----use to fix bug ----------------
        list.clear();
        return view;
    }
    

    【讨论】:

      猜你喜欢
      • 2021-12-04
      • 2020-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多