2017-12-06 4 views
-1

setHasFixsize(true)を変更しようとしましたが、動作していません 問題は私自身タブの項目が増加し、二重回 トリプル倍など あるタブは、私が持っているコンテンツフラグメントmtabfragmentは3つのタブレイアウトに3つのフラグメントのJavaファイルを作成し、私はタブ3に画像を読み込んでいますが、タブをスライドさせると、最初のタブに戻るとリサイクル表示項目が増えます

`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(); 

     } 
    }); 








} 

}

+0

行うlist.clearを取得します。 –

+0

I)は、(list.clearを適用します。コードリターンビューの前に、それは私はあなたの答えは完全であるが、その位置のコードで、私はコード内の場所を言及し、それを変更した動作していないと、それは –

+0

働いている(リスト imageUploadInfo){ this.imageUploadInfo = imageUploadInfo。 } –

答えて

0

これら三つの活動に接続する活動がありますあなたは最初にあなたのリストを初期化しました。だから、すべてのAPI呼び出しの後に新しい項目が追加されます。それを避けるために、あなたは list.clear()この行を追加します。この行の前に アダプタ=新しいRecyclerViewAdapter(のgetContext()、リスト)。 か前に、あなたのリストを初期化しないでください。新しいArrayList()を入れます。 inside onDataChangeメソッド。

0

あなたはこのようにすることができます あなたの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(); 

     } 
    }); 
+0

ます。public void setDataメソッドを働いて –

0

Iてきたばかりのコード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; 
} 
関連する問題