안녕하세요 초보안드로이드 개발자입니다.
우선 소스부터 보시죠..
public class DiaryActivity extends SherlockActivity implements OnScrollListener{
private static int AddDiary = 1;
private ListView Lv_diary;
private int listcount = 3;
private DiaryListViewAdapter adapter;
private JSONArray test = new JSONArray();
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
if(msg.obj.toString().equals("boardnull")){
Toast.makeText(DiaryActivity.this, "등록된 다이어리가 없습니다.", Toast.LENGTH_SHORT).show();
}else if(msg.obj.toString().equals("boardfail")){
Toast.makeText(DiaryActivity.this, "데이터베이스 접근실패.", Toast.LENGTH_SHORT).show();
}else{
//성공시
try {
JSONArray jsonarr;
jsonarr = new JSONArray(msg.obj.toString());
test = jsonarr;
setDiaryListView(jsonarr);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
};
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// TODO Auto-generated method stub
ActionBar actionbar = getSupportActionBar();
actionbar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
setContentView(R.layout.activity_diary);
// SharedPreferences pref = getSharedPreferences("MungNyange_userinfo", MODE_PRIVATE);
// String membership_idx = pref.getString("membership_idx", "");
try{
JSONObject ob = new JSONObject();
// ob.put("membership_idx", membership_idx);
ob.put("type", "Diary");
new DButil("http://www.wizcompany.com/gbid/app/dataset/boardprocess.php", handler, ob,"loadboard").start();
}catch (JSONException e) {
// TODO: handle exception
Log.d("ErrorLog", "PatProfileActivity : onStart : " + e.toString());
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
super.onCreateOptionsMenu(menu);
menu.add(0, AddDiary, 0, "adddiary").setIcon(R.drawable.ic_launcher).setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
if(AddDiary == item.getItemId()){
Intent intent = new Intent(this, DiaryAddActivity.class);
startActivity(intent);
}
return true;
}
// Listview 셋팅
private void setDiaryListView(JSONArray jsonarr) {
// TODO Auto-generated method stub
Lv_diary = (ListView)findViewById(R.id.Lv_diary);
adapter = new DiaryListViewAdapter(this, jsonarr, listcount);
Lv_diary.setAdapter(adapter);
Lv_diary.setOnScrollListener(this);
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
// TODO Auto-generated method stub
int count = totalItemCount - visibleItemCount;
if(firstVisibleItem >= count && totalItemCount != 0){
Log.d("--", "in!!!!!!!!!!!!!!!!!!");
listcount = listcount +3;
adapter = new DiaryListViewAdapter(this, test, listcount);
adapter.notifyDataSetChanged();
//Lv_diary.setAdapter(adapter);
}
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
// TODO Auto-generated method stub
}
}
activity구요
지금 구현하려는것은 리스트 갱신인데요
handler에서 서버에서 전송받은 데이터를 한번에 몽땅 가져옵니다.
그리구 나서 listview.setadapter 한번해주구요 여기서 3개만 뿌려주게 처음엔 셋팅햇습니다.
그리구 나서 스크롤 이벤트를걸어서 onscroll 에서 위와같이 구현햇는데요..
adapter.notifyDataSetChanged 해주고 Lv_diary.setadapter(adapter)해주면
되긴 하지만 완전히 갱신하는거라 스크롤위치가 제일 상위로 올라가버리네요..
검색결과 adapter.notifyDataSetChanged 해주고 setadapter를 안해줘도 갱신이 되고
스크롤과 무관하게 아이템리스트만 추가된다고 하던데..
저는 저렇게 작성햇는데.. 아이템이 추가 되지 않네요;;
고수님들의 아낌없는 조언 부탁드립니다 ㅠㅠ