1

I want to implement one code where data will come on Scroll and if the data is add on list then we pull down(SwipeRefreshLayout) the new data will come on that list. In my below code the add on data is coming in response but not come in list? I have read many tutorials like this but data is coming on Swipe refresh but not shown on list. Thank you in advance

public class UpdatesFragment extends Fragment implements SwipeRefreshLayout.OnRefreshListener{

SwipeRefreshLayout mSwipeRefreshLayout;

UserSessionManager session;
private List<SuperHero> listSuperHeroes;
private RecyclerView recyclerView;
private RecyclerView.LayoutManager layoutManager;
private RecyclerView.Adapter adapter;
public ProgressBar progressBar;
public String user_id;
TextView textView;
FloatingActionButton fab;
public int a=1;


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view= inflater.inflate(R.layout.fragment_updates, container, false);

    session = new UserSessionManager(getActivity());
    // get user data from session
    HashMap<String, String> user = session.getUserDetails();
    user_id = user.get(UserSessionManager.KEY_USER_ID);

    // SwipeRefreshLayout
    mSwipeRefreshLayout = (SwipeRefreshLayout) view.findViewById(R.id.swipe_container);
    mSwipeRefreshLayout.setOnRefreshListener(this);
    mSwipeRefreshLayout.setColorSchemeResources(R.color.colorPrimary,
            android.R.color.holo_green_dark,
            android.R.color.holo_orange_dark,
            android.R.color.holo_blue_dark);

    /**
     * Showing Swipe Refresh animation on activity create
     * As animation won't start on onCreate, post runnable is used
     */
    mSwipeRefreshLayout.post(new Runnable() {
        @Override
        public void run() {
            mSwipeRefreshLayout.setRefreshing(true);
            // Fetching data from server
            getDataFromServer(1);
        }
    });
    return view;
}

public void onViewCreated(View v, Bundle savedInstanceState) {
    super.onViewCreated(v, savedInstanceState);
    fab = (FloatingActionButton)v.findViewById(R.id.fab);
    recyclerView = (RecyclerView) v.findViewById(R.id.updatesRecycler);
    recyclerView.setHasFixedSize(true);
    layoutManager = new LinearLayoutManager(getContext());
    recyclerView.setLayoutManager(layoutManager);
    listSuperHeroes = new ArrayList<>();
    adapter = new CardAdapter(listSuperHeroes, getActivity());
    recyclerView.setAdapter(adapter);
    textView = (TextView)v.findViewById(R.id.text);

    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent i = new Intent(getContext(), AddWebPostActivity.class);
            startActivity(i);
        }
    });


    getDataFromServer(a);

    recyclerView.setOnScrollListener(new EndlessRecyclerOnScrollListener((LinearLayoutManager) layoutManager) {
        @Override
        public void onLoadMore(int current_page) {
            getDataFromServer(current_page);
        }
    });
}
public void  getDataFromServer(int requestCount) {
    Log.e("count",String.valueOf(requestCount));
    final String DATA_URL = "https://XYZ.php?username="+user_id + "&page="+requestCount;
    JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(DATA_URL,
            new Response.Listener<JSONArray>() {
                @Override
                public void onResponse(JSONArray response) {
                    mSwipeRefreshLayout.setRefreshing(false);
                    Log.e("URL___________",DATA_URL);
                    Log.e("response___________", String.valueOf(response));
                    parseData(response);
                    adapter.notifyDataSetChanged();
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Toast.makeText(getContext(), "No More Items Available", Toast.LENGTH_SHORT).show();
                }
            });
    RequestQueue requestQueue = Volley.newRequestQueue(getContext());
    requestQueue.getCache().clear();
    requestQueue.add(jsonArrayRequest);
}

private void parseData(JSONArray array) {
    for (int i = 0; i < array.length(); i++) {
        SuperHero superHero = new SuperHero();
        JSONObject json = null;
        try {
            json = array.getJSONObject(i);
            superHero.setPost_title(json.getString(Config.TAG_POST_TITLE));
            superHero.setPost_content(json.getString(Config.TAG_POST_CONTENT));
            superHero.setPost_parent(json.getString(Config.TAG_POST_PARENT));
            superHero.setPost_date(json.getString(Config.TAG_POST_DATE));
            superHero.setPost_date_gmt(json.getString(Config.TAG_POST_DATE_GMT));
            superHero.setScheduled_date(json.getString(Config.TAG_SCHEDULED_DATE));
            superHero.setTo_ping(json.getString(Config.TAG_IP_ADDRESS));
            superHero.setVisit_post(json.getString(Config.TAG_VISIT_POST));
            superHero.setUr_id(json.getString(Config.TAG_UR_ID));
        } catch (JSONException e) {
            e.printStackTrace();
        }
        listSuperHeroes.add(superHero);
    }
}

/**
 * Called when a swipe gesture triggers a refresh.
 */
@Override
public void onRefresh() {
    getDataFromServer(1);
  }
}

Adapter

public class CardAdapter extends RecyclerView.Adapter<CardAdapter.ViewHolder> {

UserSessionManager session;
public String user_id;
public String ur_id;

private Context context;

//String visit;

//List to store all superheroes
List<SuperHero> superHeroes;

//Constructor of this class
public CardAdapter(List<SuperHero> superHeroes, Context context){
    super();
    //Getting all superheroes
    this.superHeroes = superHeroes;
    this.context = context;
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View v = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.web_post, parent, false);
    // Session class instance
    session = new UserSessionManager(context);
    session.checkLogin();
    // get user data from session
    HashMap<String, String> user = session.getUserDetails();
    user_id = user.get(UserSessionManager.KEY_USER_ID);
    ViewHolder viewHolder = new ViewHolder(v);
    return viewHolder;
}

@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {

    //Getting the particular item from the list
    final SuperHero superHero =  superHeroes.get(position);
    holder.tvPostTitle.setText(superHero.getPost_title());
    holder.tvPostContent.setText(superHero.getPost_content());
    holder.tvPostDateTime1.setText(superHero.getPost_date() +" / " +superHero.getPost_date_gmt());

    final String visit = superHero.getVisit_post();

    holder.tvVisitPost.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent i = new Intent(context,VisitWebView.class);
            i.putExtra("visitURL",visit);
            context.startActivity(i);
        }
    });  
}

@Override
public int getItemCount() {
    return superHeroes.size();
}

@Override
public int getItemViewType(int position) {
    return position;
}

class ViewHolder extends RecyclerView.ViewHolder{
    //Views
    public TextView tvPostTitle,tvPostContent,tvPostDateTime1,tvVisitPost;
    public ImageButton removeButton;

    //Initializing Views
    public ViewHolder(final View itemView) {
        super(itemView);
        tvPostTitle = (TextView) itemView.findViewById(R.id.tvPostTitle);
        tvPostContent = (TextView) itemView.findViewById(R.id.tvPostContent);
        tvPostDateTime1 = (TextView) itemView.findViewById(R.id.tvPostDateTime1);
        tvVisitPost = (TextView) itemView.findViewById(R.id.tvVisitPost);
        removeButton = (ImageButton) itemView.findViewById(R.id.removeButton);
    }
   }
  }
Paramjeet Singh
  • 145
  • 1
  • 3
  • 15

2 Answers2

1

use this method

  mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
  @Override
  public void onRefresh() {

mSwipeRefreshLayout.setRefreshing(true); getDataFromServer(1);

}

instead of this

   mSwipeRefreshLayout.post(new Runnable() {
    @Override
    public void run() {
        mSwipeRefreshLayout.setRefreshing(true);
        // Fetching data from server
        getDataFromServer(1);
    }
});
0

Please call adapter and pass fresh list data after this line

listSuperHeroes.add(superHero) in parseData(response) function ;

adapter = new CardAdapter(listSuperHeroes, getActivity());
recyclerView.setAdapter(adapter)
adapter.notifyDataSetChanged();
Babul
  • 1,076
  • 7
  • 9