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