티스토리 뷰

ANDROID

refreshListener 참고

장꾸꾸 2020. 12. 31. 17:56
package com.real.reagain;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.TextView;

import com.android.volley.AuthFailureError;
import com.android.volley.DefaultRetryPolicy;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import com.bumptech.glide.Glide;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import util.StaticValue;

public class MyListActivity extends AppCompatActivity implements SwipeRefreshLayout.OnRefreshListener {
    String idx = "-1";
    boolean isEnd = false;
    boolean lastItemVisibleFlag = false;
    ArrayList<ItemData> arr = new ArrayList<>();
    MyAdapter adapter;

    TextView tvTitle;
    ListView lvMain;
    ProgressBar loading_progress;
    SwipeRefreshLayout swipe;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my_list);
        tvTitle = findViewById(R.id.tv_title);
        lvMain = findViewById(R.id.lv_main);
        loading_progress = findViewById(R.id.loading_progress);
        swipe = findViewById(R.id.swipe);

        swipe.setOnRefreshListener(this);

        arr.add(new ItemData("1", "안녕", "개똥이", "2020,01,01"));
        arr.add(new ItemData("2", "안녕2", "개똥이", "2020,01,01"));
        arr.add(new ItemData("3", "안녕3", "개똥이", "2020,01,01"));

        adapter = new MyAdapter(this);
        lvMain.setAdapter(adapter);
        lvMain.setOnScrollListener(new AbsListView.OnScrollListener() {
            @Override
            public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
                //현재 화면에 보이는 첫번째 리스트 아이템의 번호(firstVisibleItem) + 현재 화면에 보이는 리스트 아이템의 갯수(visibleItemCount)가 리스트 전체의 갯수(totalItemCount) -1 보다 크거나 같을때
                lastItemVisibleFlag = (totalItemCount > 0) && (firstVisibleItem + visibleItemCount >= totalItemCount);
            }
            @Override
            public void onScrollStateChanged(AbsListView view, int scrollState) {
                //OnScrollListener.SCROLL_STATE_IDLE은 스크롤이 이동하다가 멈추었을때 발생되는 스크롤 상태입니다.
                //즉 스크롤이 바닦에 닿아 멈춘 상태에 처리를 하겠다는 뜻
                if(scrollState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE && lastItemVisibleFlag
                    && isEnd ==false) {
                    //TODO 화면이 바닦에 닿을때 처리
                    lastItemVisibleFlag = false;
                    //통신 요청
                    idx = arr.get(arr.size()-1).idx;
                    request();
                }
            }

        });

        request();
    }

    private void request() {
        /** post **/
        loading_progress.setVisibility(View.VISIBLE);
        RequestQueue stringRequest = Volley.newRequestQueue(this);
        String url = "http://heutwo.dothome.co.kr/delete/free_list.php?idx=-1&token=721cecf8de3ffb8556586c116a298aa85a522bdb3ba11c070d5249644cea6172";

        StringRequest myReq = new StringRequest(Request.Method.POST, url,
                successListener, errorListener) {
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                Map<String, String> params = new HashMap<String, String>();
                params.put("idx", idx);
                params.put("token", StaticValue.token);
                return params;
            }
        };
        myReq.setRetryPolicy(new DefaultRetryPolicy(3000, 0, 1f)
        );
        stringRequest.add(myReq);

    }

    Response.Listener<String> successListener = new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {

            Log.d("aabb","res: "+response);
            try {
                swipe.setRefreshing(false);
                loading_progress.setVisibility(View.INVISIBLE);
                JSONObject jsonObject = new JSONObject(response);
                if(jsonObject.getString("result").equalsIgnoreCase("OK")){
                    isEnd = jsonObject.getString("is_end").equalsIgnoreCase("n")?false:true;
                    if(idx.equalsIgnoreCase("-1")){
                        arr.clear();
                    }
                    JSONArray jsonArray = jsonObject.getJSONArray("list");
                    for (int i = 0; i < jsonArray.length(); i++) {
                        JSONObject temp = jsonArray.getJSONObject(i);
                        String idx = temp.getString("idx");
                        String title = temp.getString("title");
                        String content = temp.getString("content");
                        String writer = temp.getString("writer");
                        arr.add(new ItemData(idx, title, content,writer));
                    }
                    adapter.notifyDataSetChanged();
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    };

    Response.ErrorListener errorListener = new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Log.d("aabb","error: ");
            loading_progress.setVisibility(View.INVISIBLE);
            swipe.setRefreshing(false);
            int num = 10;
        }
    };

    @Override
    public void onRefresh() {
        idx="-1";
        request();
    }

    class ItemHolder {
        TextView tvTitleHolder;
        TextView tvWriterHolder;

    }


    class MyAdapter extends ArrayAdapter {
        LayoutInflater lnf;

        public MyAdapter(Activity context) {
            super(context, R.layout.item, arr);
            lnf = (LayoutInflater) context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        }

        @Override
        public int getCount() {
            return arr.size();
        }

        @Override
        public Object getItem(int position) {
            return super.getItem(position);
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        public View getView(int position, View convertView, ViewGroup parent) {
            ItemHolder viewHolder;
            if (convertView == null) {

                convertView = lnf.inflate(R.layout.item, parent, false);
                viewHolder = new ItemHolder();

                viewHolder.tvTitleHolder = convertView.findViewById(R.id.tv_title);
                viewHolder.tvWriterHolder = convertView.findViewById(R.id.tv_writer);


                convertView.setTag(viewHolder);
            } else {
                viewHolder = (ItemHolder) convertView.getTag();
            }

            viewHolder.tvTitleHolder.setText(arr.get(position).title);
            viewHolder.tvWriterHolder.setText(arr.get(position).writer);

            return convertView;
        }
    }
}
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함