마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

listView에 데이터를 가져와서 덮어쓰지 않고 아래에 추가할려면 어떻게 해야 할까요?

0 추천

AsyncHttpClient 이용해서 데이터 가져와서 listView에 넣는거까진 성공했는데 내용이 많아서 한번에 20개씩 보여주는걸로 처리했고요
버튼을 클릭할때마다 20개씩 추가로 보여줄려고 하는데 데이터가 추가되는게 아니라 현재 listView를 덮어써 버리네요.
실제론 버튼 클릭이 아니라 스크롤할때 적용하겠지만 중요한건 데이터를 추가하는게 목적인데 잘 안됩니다.
답변 부탁드립니다.

import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ListView;

import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.JsonHttpResponseHandler;
import com.loopj.android.http.RequestParams;

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

import java.util.ArrayList;

import cz.msebera.android.httpclient.Header;

public class MainActivity extends AppCompatActivity {
    public static final String TAG = "MainActivity";

    ListView listView;
    WordsInfoAdapter wiAdapter;

    Handler handler = new Handler();

    ArrayList<WordsInfoItem> itemList;

    //paging 처리
    int totalPage; //전체 페이지
    int curPage; //현재 페이지
    boolean mLockListView;

    Button button;

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

        listView = (ListView) findViewById(R.id.listView);

        wiAdapter = new WordsInfoAdapter();
        listView.setAdapter(wiAdapter);

        curPage = 1;
        mLockListView = true;
        getWordsInfo(curPage);

        
        button = (Button) findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(totalPage > curPage) {
                    curPage++;
                } else {
                    curPage = 1;
                }
                getWordsInfo(curPage); 
            }
        });

        

    }

    //어댑터 설정
    class WordsInfoAdapter extends BaseAdapter {
        ArrayList<WordsInfoItem> itemList = new ArrayList<WordsInfoItem>();

        public void setItemList(ArrayList<WordsInfoItem> itemList) {

            this.itemList = itemList;

        }

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

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

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

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {

            WordsInfoView view = null;
            if(convertView == null) {
                view = new WordsInfoView(getApplicationContext());
            } else {
                view = (WordsInfoView) convertView;
            }

            view.setWordsInfoItem(itemList.get(position));

            return view;
        }
    }

    //데이터 가져오기
    private void getWordsInfo(int page) {
        curPage = page;
        AsyncHttpClient client = new AsyncHttpClient();
        RequestParams params = new RequestParams();
        params.put("page",page);
        client.post("서버주소", params, new JsonHttpResponseHandler() {
            @Override
            public void onFailure(int statusCode, Header[] headers, Throwable throwable, JSONObject errorResponse) {
                Log.d(TAG, "onFailure : ");
            }

            @Override
            public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
                Log.d(TAG, "onSuccess : ");
                try{
                    Log.d(TAG, response.getString("res") + ", " + response.getInt("total_page"));

                    if(response.getString("res").equals("ok")) {
                        totalPage = response.getInt("total_page");

                        itemList = new ArrayList<WordsInfoItem>();
                        JSONArray jsonArray = new JSONArray(response.getString("list"));
                        for (int i = 0; i < jsonArray.length(); i++) {
                            JSONObject obj = new JSONObject(jsonArray.getString(i));

                            itemList.add(new WordsInfoItem(obj.getString("grade_type"), obj.getString("pub_name"), obj.getString("vname"), obj.getString("wdate"), obj.getString("who")));
                        }
                        wiAdapter.setItemList(itemList);
                        wiAdapter.notifyDataSetChanged();

                        
                    } else {
                        Log.d(TAG, "데이터 가져오기 실패");
                    }

                }catch(Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

}





//WordsInfoView.java 내용
import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.widget.LinearLayout;
import android.widget.TextView;

public class WordsInfoView extends LinearLayout{

    TextView vnameTextView, pub_nameTextView, grade_typeTextView, wdateTextView, whoTextView;

    public WordsInfoView(Context context) {
        super(context);

        init(context);
    }

    public WordsInfoView(Context context, AttributeSet attrs) {
        super(context, attrs);

        init(context);
    }

    private void init(Context context) {        
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        inflater.inflate(R.layout.words_info, this, true);

       
        vnameTextView = (TextView) findViewById(R.id.vnameTextView);
        pub_nameTextView = (TextView) findViewById(R.id.pub_nameTextView);
        grade_typeTextView = (TextView) findViewById(R.id.grade_typeTextView);
        wdateTextView = (TextView) findViewById(R.id.wdateTextView);
        whoTextView = (TextView) findViewById(R.id.whoTextView);
    }

    
    public void setWordsInfoItem(WordsInfoItem item) {
        String vname = item.getVname();
        String pub_name = item.getPub_name();
        String grade_type = item.getGrade_type();
        String wdate = item.getWdate();
        String who = item.getWho();

        vnameTextView.setText(vname);
        pub_nameTextView.setText(pub_name);
        grade_typeTextView.setText(grade_type);
        wdateTextView.setText(wdate);
        whoTextView.setText(who);
    }

}

 

sjoonai (210 포인트) 님이 2016년 7월 25일 질문
sjoonai님이 2016년 7월 25일 수정

1개의 답변

+1 추천
 
채택된 답변

데이터를 가져오는 

 

private void getWordsInfo(int page) {

 

함수 부분에서 

 

itemList = new ArrayList<WordsInfoItem>(); 이렇게 계속해서  리스트를 새로 생성하기때문에 새로 가져오는 리스트만 보여지게됩니다.

if(itemList == null) 

itemList = new ArrayList<WordsInfoItem>();

 

이렇게 변경해주시면 될듯합니다.^^

은평구멍멍이 (2,630 포인트) 님이 2016년 7월 25일 답변
sjoonai님이 2016년 7월 25일 채택됨
감사합니다. 쉽게 해결이 되었습니다. ^^
책을 보고 따라 하는 수준이라 역시 기본기 부족이네요...
...