在滚动上实现加载数据

时间:2017-05-19 10:05:44

标签: android arrays json scrollview

这是我的试用版请告诉我如何在滚动中加载数据 我正在使用onScrollStateChanged,但它不适用于我。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    lvls = (ListView) findViewById(R.id.listview);
   lvls.setOnScrollListener(new EndlessScrollListener());
}

class EndlessScrollListener implements AbsListView.OnScrollListener {
    @Override
    public void onScrollStateChanged(AbsListView view, int scrollState) {
    }
    @Override
    public void onScroll(AbsListView view, int firstVisibleItem,
                         int visibleItemCount, int totalItemCount) {

        GallaryLoad();
    }


public class CustomAdapter extends BaseAdapter {
@Override
    public int getCount() {
        // TODO Auto-generated method stub
        return array_bean.size();
    }
@Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return position;
    }
@Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }
@Override
    public View getView(final int position, View convertView,
                        ViewGroup parent) {
                if (convertView == null) {
                convertView = getLayoutInflater().inflate(R.layout.activity_reader, null);
        }
        ImageView imageView = (ImageView) convertView.findViewById(R.id.reader_thumbnail);
        TextView textView = (TextView) convertView.findViewById(R.id.reader_title);
        TextView reader_categories = (TextView) convertView.findViewById(R.id.reader_categories);
          Picasso
                .with(MainActivity.this)
                .load("http://it-tips.org/wp-content/uploads/2016/10/primefactors.png")
                .transform(new RoundedCornersTransformation(15, 1,
                        RoundedCornersTransformation.CornerType.TOP))
                .placeholder(R.drawable.progress_animation)
                .into(imageView);


        textView.setText(array_bean.get(position).getTitle());
        reader_categories.setText(array_bean.get(position).getCategories());
        return convertView;
    }
}
private void GallaryLoad() {
        JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, url, null,
            new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {
                    try {
                        JSONArray jsonObject = response.getJSONArray("posts");
                        for (int i = 0; i < jsonObject.length(); i++) {
                            JSONObject object1 = jsonObject.getJSONObject(i);
                            PostItem info = new PostItem();
                            info.setTitle(object1.getString("title"));
                            info.setCategories(object1.getString("slug"));
 info.setImgUrl(object1.getString("url"));

                            array_bean.add(info);
                            lvls.setAdapter(new CustomAdapter());
                            progressBar.setVisibility(View.GONE);

                        }
                    } catch (JSONException e) {
                        Toast.makeText(getApplicationContext(), "Not available", Toast.LENGTH_SHORT).show();
                        e.printStackTrace();
                        progressBar.setVisibility(View.GONE);
                    }
                }
            }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            progressBar.setVisibility(View.GONE);
            Toast.makeText(getApplicationContext(), "something went wrong", Toast.LENGTH_LONG).show();

        }

    });
    Volley.newRequestQueue(this).add(jsonObjectRequest);
}

我是新的Android开发人员,但无法理解如何放入我的列表视图生病看到这么多教程但我不能理解所以请帮我用滚动加载数据

谢谢

2 个答案:

答案 0 :(得分:0)

list.setOnScrollListener(new AbsListView.OnScrollListener() {
        @Override
        public void onScrollStateChanged(AbsListView view, int scrollState) {

        }

        @Override
        public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
            if (list.getLastVisiblePosition() == -1) {
            } else if (list.getLastVisiblePosition() == (skip - 1) && !isLoading) {
                isLoading = true;
                getParticipant();
            }
        }
    });

在响应回调中更新跳过(没有加载数据)和isLoading(使其为false)。您可以将此跳过传递给您的网络电话,以便他们提供此号码旁边的数据。

list.getLastVisiblePosition() means nothing is visible.

答案 1 :(得分:0)

  1. 为您的目的使用RecyclerView
  2. 实施RecyclerView.Adapter
  3. bindViewHolder(VH holder, int position)中确定您要重新加载数据的最后位置
  4. 如果位置是&gt;则重新加载数据x,其中x是你重新加载数据的位置,通常你想在x == getItemCount()
  5. 时重新加载
  6. 在适配器上应用notifyDataSetChanged()
  7. 那里有很多关于RecyclerView的教程。 一个好的开始是 Creating list and Cards

    See RecyclerView.Adapter Documentation