首页 > 解决方案 > 下拉刷新时,回收站列表中不显示新的获取数据

问题描述

我想实现一个代码,其中数据将出现在 Scroll 上,如果数据被添加到列表中,那么我们下拉(SwipeRefreshLayout)新数据将出现在该列表中。在我下面的代码中,附加数据正在响应但不在列表中?我已经阅读了很多这样的教程,但是数据会在刷卡刷新时出现,但未显示在列表中。先感谢您

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);
  }
}

适配器

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);
    }
   }
  }

标签: javaandroidandroid-recyclerview

解决方案


使用这个方法

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

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

}

而不是这个

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

推荐阅读