1

私はこのような断片クラスを持っています。アダプターが更新されず、recyclerviewが変更されました。notifyDataSetChangedは機能しません。

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

    View rootView = inflater.inflate(R.layout.fragment_facebookfeeds,container,false); 
    mLayoutManager = new LinearLayoutManager(getActivity()); 


    mRecyclerView = (RecyclerView) rootView.findViewById(R.id.my_recycler_view_facebook); 
    mRecyclerView.setHasFixedSize(true); 


    GetTimeline(TimelineUrl, next, new ServerCallback() { 
     @Override 
     public void onSuccess(Facebook result) { 
      next = result.getNext(); 
      List<Facebook> newList = new ArrayList<>(); 
      newList.add(result); 
      facebookList.clear(); 
      facebookList.addAll(newList); 
      mAdapter = new FacebookAdapter(facebookList,getActivity()); 
      mRecyclerView.setLayoutManager(mLayoutManager); 
      mRecyclerView.setItemAnimator(new DefaultItemAnimator()); 
      mRecyclerView.setAdapter(mAdapter); 
      //mAdapter.notifyDataSetChanged(); 

     } 
    }); 




    mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { 

     @Override 
     public void onScrolled(RecyclerView recyclerView, int dx, int dy) { 
      super.onScrolled(recyclerView, dx, dy); 

      visibleItemCount = mRecyclerView.getChildCount(); 
      totalItemCount = mLayoutManager.getItemCount(); 
      firstVisibleItem = mLayoutManager.findFirstVisibleItemPosition(); 

      if (loading) { 
       if (totalItemCount > previousTotal) { 
        loading = false; 
        previousTotal = totalItemCount; 
       } 
      } 
      if (!loading && (totalItemCount - visibleItemCount) 
        <= (firstVisibleItem + visibleThreshold)) { 
       GetTimeline(TimelineUrl, next, new ServerCallback() { 
        @Override 
        public void onSuccess(Facebook result) { 
         next = result.getNext(); 
         List<Facebook> newFacebook = new ArrayList<Facebook>(); 
         newFacebook.add(result); 
         facebookList.clear(); 
         facebookList.addAll(newFacebook); 
         mAdapter.notifyDataSetChanged(); 
         System.out.println("New Adapter Item Count "+mAdapter.getItemCount()); 
        } 
       }); 
       loading = true; 
      } 
     } 
    }); 

    // Inflate the layout for this fragment 
    return rootView; 
} 

私のアダプタは次のようなものです。

private List<Facebook> facebook; 
private List<String> feed = new ArrayList<>(); 
private List<String> feedImage = new ArrayList<>(); 
int sum; 
private String image; 
private String user; 
private Context context; 
// Provide a reference to the views for each data item 
// Complex data items may need more than one view per item, and 
// you provide access to all the views for a data item in a view holder 
public class ViewHolder extends RecyclerView.ViewHolder { 
    // each data item is just a string in this case 
    public TextView fbfeed; 
    public ImageView fbImage; 
    public ViewHolder(View view) { 
     super(view); 
     fbfeed = (TextView) view.findViewById(R.id.fbfeed); 
     fbImage = (ImageView) view.findViewById(R.id.fbprofile_url); 

    } 
} 

// Provide a suitable constructor (depends on the kind of dataset) 
public FacebookAdapter(List<Facebook> facebook,Context context) { 

    this.facebook = facebook; 
    this.context = context; 
    notifyDataSetChanged(); 
    String singleTweet = ""; 
    String singleImage; 
     System.out.println("Coming inside facebook adapter"); 
     for(int i=0;i<facebook.size();i++){ 
      for(int j=0;j<facebook.get(i).getFeeds().size();j++){ 
       singleTweet = facebook.get(i).getFeeds().get(j).getStatus(); 
       feed.add(singleTweet); 
       singleImage = facebook.get(i).getFeeds().get(j).getImage(); 
       if(singleImage!=null){ 
        feedImage.add(singleImage); 
       } 
       else{ 
        feedImage.add("No Image"); 
       } 

      } 
     } 
     //new stuff 
     sum = 0; 
     for(int i=0;i<facebook.size();i++){ 
      sum = sum + facebook.get(i).getFeeds().size(); 
     } 

} 

// Create new views (invoked by the layout manager) 
@Override 
public ViewHolder onCreateViewHolder(ViewGroup parent, 
            int viewType) { 
    // create a new view 
    View itemview = LayoutInflater.from(parent.getContext()) 
      .inflate(R.layout.fbfeed_row, parent, false); 
    // set the view's size, margins, paddings and layout parameters 
    return new ViewHolder(itemview); 
} 

問題が何であるかはわかりませんが、多くの回答を読んだことがありますが、何も役立たないようです。
GetTimelineは、私がコールするために使用するVolleyのメソッドです。

答えて

1

いいえこれを修正しました。 私は、単にアダプタのコンストラクタで書かれたロジックをフラグメントクラスに移動し、そのデータをアダプタに渡しました。最後に、adapter.notifyDataSetChanged()が機能しました!

関連する問題