질문1. 아래처럼 했는데 가끔 더보기진행될때 죽어요
java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified from a background thread, but only from the UI thread. [in ListView(16908298, class android.widget.ListView) with Adapter(class android.widget.HeaderViewListAdapter)]
밑에 굵은 글자랑 맨아래 굵은 글자 땜에 그런거같기도 하구요
ArrayAdapter<FormMyinfoDefine> adapter;
final ArrayList<FormMyinfoDefine> abList = new ArrayList<FormMyinfoDefine>();
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.form_myinfo);
//더보기 구현
View view = getLayoutInflater().inflate(R.layout.more, null, false);
listView = getListView();
listView.addFooterView(view, null, false);
//Button more_button = (Button)findViewById(R.id.loadMore);
//more_button.setVisibility(View.GONE);
listView.setOnScrollListener(new OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
mCurrentScrollState = scrollState;
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount, int totalItemCount) {
int count = totalItemCount - visibleItemCount;
if(firstVisibleItem >= count && totalItemCount != 0 && mLockListView == false) {
Log.v(TAG, "IN, totalItemCount = " + totalItemCount);
mLockListView = true;
showList("xml주소", "test", "", "", Integer.toString(tpage++));
Log.v(TAG, "IN END");
}
}
});
initImage();
initList();
}
public void initImage() {
ImageDownloader.Mode mode = ImageDownloader.Mode.CORRECT;
getImageDownloader().setMode(mode);
}
public ImageDownloader getImageDownloader() {
return imageDownloader;
}
public void initList() {
mLoagindDialog = ProgressDialog.show(context, null, "로딩중입니다...", true, false);
showList("xml주소", "test", "", "", "");
Thread ProgressDialogStopThread = new ProgressDialogStop( mLoagindDialog );
ProgressDialogStopThread.start();
}
public void showList(final String wurl, String u1, String u2, String u3, String u4 ) {
new MyAsyncTask().execute(wurl, u1, u2, u3, u4);
}
// AsyncTask
public class MyAsyncTask extends AsyncTask<String, Void, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected String doInBackground(String... params) {
rcount = 0; // count 초기화
try {
소스가 길어 생략 ..............
if (resEntity != null) {
// XMLPullParser 이용 파싱
소스가 길어 생략 ..............
// 데이터 분석중 xml 파일의 문서 (END_DOCUMENT) 끝이 아니면 while
while(event != XmlPullParser.END_DOCUMENT ){
switch (event) {
case XmlPullParser.START_DOCUMENT:
break;
case XmlPullParser.END_DOCUMENT:
break;
case XmlPullParser.START_TAG:
String itemTag = parser.getName();
if (itemTag.equals("item")) {
F ormMyinfoDefine data = new FormMyinfoDefine(
parser.getAttributeValue(null, "idx"),
parser.getAttributeValue(null, "code"),
parser.getAttributeValue(null, "name"),
parser.getAttributeValue(null, "photo"),
parser.getAttributeValue(null, "memo"),
parser.getAttributeValue(null, "regdate"),
parser.getAttributeValue(null, "viewflag"));
abList.add(data);
if (TextUtils.isEmpty(parser.getAttributeValue(0)) == false){
rcount += 1;
}
}
break;
case XmlPullParser.TEXT:
break;
case XmlPullParser.END_TAG:
break;
}
event = parser.next();
}
}
}
catch( Exception e ){
e.printStackTrace();
Toast.makeText(context, "접속이 원할하지 않습니다. 잠시후 다시 이용해 주세요.", Toast.LENGTH_SHORT).show();
}
System.out.println("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA");
return null;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
adapter = new listAdapter(context, R.layout.form_myinfo_list, R.id.stl1, abList);
if(tpage == 1) {
listView.setAdapter(adapter);
}
adapter.notifyDataSetChanged(); // 변경된 데이터셋을 리스트에 재출력
mLockListView = false;
System.out.println("BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB");
//Toast.makeText(getApplicationContext(), "로딩완료", 0).show();
}
@Override
protected void onCancelled() {
super.onCancelled();
}
}
adapter.notifyDataSetChanged() 를
listView.setAdapter(adaoter) 하기 전에 해줘 보세요. 오류 내용 보면 이게 맞을 듯 합니다.