질문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();
  }
 
    }