Просмотр содержимого еще не создан, removeHeaderView

Когда я обновляю свой список, и я заношу свою tabactivity в одно и то же время, я получаю недопустимое исключение Exception: Content еще не создан. Я понимаю, что список не создан полностью, но в моем коде я не нашел решение своей проблемы. Ошибка в методе removeHeader.

public class PFrag extends ListFragment implements OnScrollListener,OnTouchListener{



ArrayList<string> items = new ArrayList<string>();
boolean endProcess = false;
boolean stopLoadMore=false;

IconAdapter myAdapter;
int totalItem=0;
int last=0;
View vfoot;
View vheader;
float currentY;
float previousY;
boolean allowRefresh=false;
boolean refresh=false;
boolean activescroll=true;
boolean move=false;
AddStringTask process;


public PFrag() {
 super();

}



public void onActivityCreated(Bundle savedInstanceState) {
 super.onActivityCreated(savedInstanceState);
 ArrayList<test> l = new ArrayList<test>();
 myAdapter = new IconAdapter(getActivity(), R.layout.row,l);
 initFoot();
 getListView().setOnScrollListener(this);
 getListView().setOnTouchListener(this);
 setListAdapter(myAdapter);
 process=new AddStringTask();
 process.execute(0);

}




public void initFoot(){
 if(getListView().getFooterViewsCount()==0 && vfoot==null){
 vfoot = LayoutInflater.from(getActivity()).inflate(R.layout.footer, null);
 getListView().addFooterView(vfoot, null, false);
 stopLoadMore=false;
 getListView().requestLayout();
 Log.v("initfoot","create");
 }
}





private class AddStringTask extends AsyncTask<integer, string,="" arraylist<test="">>{

 protected void onPreExecute() { 

 }

 @Override
 protected ArrayList<test> doInBackground(Integer... in) {


 ......Operation
 }

 }else{
 Log.v("status", "stoploadmore");
 stopLoadMore=true;

 }

 } catch (ClientProtocolException e) {

 stopLoadMore=true;

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

 stopLoadMore=true;
 e.printStackTrace();
 }

 return list;
 }


 protected void onProgressUpdate(String... item) {
 }


 protected void onPostExecute(ArrayList<test> in) {

 cancel(true);
 if(refresh & !activescroll){
 ((IconAdapter)getListAdapter()).setEntries(new ArrayList<test>()); 
 ((IconAdapter)getListAdapter()).add(in);
 }
 if(!refresh & activescroll)
 ((IconAdapter)getListAdapter()).add(in);
 removeHeader();
 ((IconAdapter)getListAdapter()).setNotifyOnChange(true);

 endProcess=true;

 }
}


public ArrayList<test> displayTest(String response){ //
 .........
}


public boolean isOnTop(){ 
 ....
} 


private boolean isOnDown() {
 ....
}


@Override
public void onListItemClick(ListView lv, View view, int position,
 long id) {

 Log.v("position",String.valueOf(position));
 Test Test = (Test) getListView().getItemAtPosition(position);
 Toast.makeText(getActivity(), String.valueOf(Test.getNamesociete()), Toast.LENGTH_SHORT).show();
 Intent intent = new Intent(getActivity(),TestDetailActivity.class);
 startActivity(intent); 
}


@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {

}

public void removeFoot(){

 if(getListView().getFooterViewsCount()>0 && vfoot!=null){ 
 vfoot.setVisibility( View.INVISIBLE);
 ((IconAdapter)getListAdapter()).setNotifyOnChange(true);
 getListView().requestLayout();

 }

}



/* THE PROBLEM IS THIS METHOD */

public void removeHeader(){

 if(getListView().getHeaderViewsCount()>0){
 Log.v("removeheaderInIF", "ok"); 
 getListView().removeHeaderView(vheader);
 Toast.makeText(getActivity(), "delete header", Toast.LENGTH_SHORT).show();
 ((IconAdapter)getListAdapter()).setNotifyOnChange(true);
 getListView().requestLayout();
 } 
}


public void initHeader(){

 try{
 if(getListView().getHeaderViewsCount()==0 ){ 
 vheader = LayoutInflater.from(getActivity()).inflate(R.layout.header, null);
 getListView().addHeaderView(vheader, null, false);
 stopLoadMore=false;
 getListView().requestLayout();
 Log.v("initheader","create"); 
 } 
 }catch(Exception e){
 Log.v("headererror",String.valueOf(e));
 } 
}



@Override
public void onScroll(AbsListView view, int firstVisibleItem,
 int visibleItemCount, int totalItemCount) {

 last = firstVisibleItem + visibleItemCount; 

 totalItem = totalItemCount;
 if(!stopLoadMore){

 if(last+2 >= totalItemCount && endProcess && isOnDown() ){ 

 endProcess=false;
 activescroll=true;
 vfoot.setVisibility(View.VISIBLE);
 process=new AddStringTask();
 process.execute(totalItemCount-1);

 }
 }else {
 stopLoadMore=true;

 removeFoot(); 
 }
}





@Override
public boolean onTouch(View v, MotionEvent event) {

 switch(event.getAction()){
 case MotionEvent.ACTION_DOWN:

 previousY = event.getRawY();
 //Allows refresh if the first visible item is the first in the list
 allowRefresh = isOnTop();
 move=false;
 break;

 case MotionEvent.ACTION_MOVE:

 if(allowRefresh){
 if((previousY - event.getRawY()) <= -50){
 refresh = true;
 move=true;
 }
 else{
 refresh = false;
 move=false;
 }
 }

 break;
 case MotionEvent.ACTION_UP:
 //Refresh
 if(move){ 
 if(refresh & endProcess ){
 Toast.makeText(getActivity(), "Refresh", Toast.LENGTH_SHORT).show();
 activescroll=false; 
 stopAsyncOperation(); 
 initHeader();
 ((IconAdapter)getListAdapter()).setNotifyOnChange(true); 
 new AddStringTask().execute(0); 
 }
 }
 break;
 }
 return false;
}



@Override
public void onPause(){

 stopAsyncOperation();
 super.onPause();
}


 private void stopAsyncOperation(){
 if( process != null){ 
 if( process.getStatus().equals( AsyncTask.Status.RUNNING )){
 process.cancel( true );
 }
 }
 }

@Override
public void onDestroy(){
 stopAsyncOperation();
 super.onDestroy();
}
</test></test></test></test></integer,></test></test></string></string>

}

здесь ошибка:

08-11 21: 59: 51.319: E/AndroidRuntime (1186): FATAL EXCEPTION: main 08-11 21: 59: 51.319: E/AndroidRuntime (1186): java.lang.IllegalStateException: просмотр содержимого еще не создан 08-11 21: 59: 51.319: E/AndroidRuntime (1186): at android.support.v4.app.ListFragment.ensureList(ListFragment.java:328) 08-11 21: 59: 51.319: E/AndroidRuntime (1186): у android.support.v4.app.ListFragment.getListView(ListFragment.java:222) 08-11 21: 59: 51.319: E/AndroidRuntime (1186): at com.app.swype.ProximiteFrag.removeHeader(ProximiteFrag.java:396) 08-11 21: 59: 51.319: E/AndroidRuntime (1186): at com.app.swype.ProximiteFrag $ AddStringTask.onPostExecute(ProximiteFrag.java:269) 08-11 21: 59: 51.319: E/AndroidRuntime (1186): at com.app.swype.ProximiteFrag $ AddStringTask.onPostExecute(ProximiteFrag.java:1) 08-11 21: 59: 51.319: E/AndroidRuntime (1186): at android.os.AsyncTask.finish(AsyncTask.java:602 ) 08-11 21: 59: 51.319: E/AndroidRuntime (1186): at android.os.AsyncTask.access $ 600 (AsyncTask.java:156) 08-11 21: 59: 51.319: E/AndroidRuntim e (1186): at android.os.AsyncTask $ InternalHandler.handleMessage(AsyncTask.java:615) 08-11 21: 59: 51.319: E/AndroidRuntime (1186): at android.os.Handler.dispatchMessage(Handler.java: 99) 08-11 21: 59: 51.319: E/AndroidRuntime (1186): at android.os.Looper.loop(Looper.java:137) 08-11 21: 59: 51.319: E/AndroidRuntime (1186): at android.app.ActivityThread.main(ActivityThread.java:4424) 08-11 21: 59: 51.319: E/AndroidRuntime (1186): at java.lang.reflect.Method.invokeNative (собственный метод) 08-11 21: 59: 51.319: E/AndroidRuntime (1186): at java.lang.reflect.Method.invoke(Method.java:511) 08-11 21: 59: 51.319: E/AndroidRuntime (1186): at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:784) 08-11 21: 59: 51.319: E/AndroidRuntime (1186): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 08-11 21: 59: 51.319: E/AndroidRuntime (1186): at dalvik.system.NativeStart.main (собственный метод)

public class MyPagerAdapter extends FragmentStatePagerAdapter {

public static Fragment prof;
public static Fragment catf;
public static Fragment cof;

public MyPagerAdapter(FragmentManager fm) {
 super(fm);

}


@Override
public Fragment getItem(int arg0) {



 Fragment fragment = null;
 if(arg0==0){

 if(prof==null){
 Log.v("fragment1","kk1");
 prof = new PFrag();
 return prof;
 }



 }else if (arg0==1){
 if(catf==null){
 Log.v("fragment2","kk1");
 catf = new CFrag();
 return catf;
 }

 }else if (arg0==2){

 if(cof==null){
 Log.v("fragment3","kk1");
 cof = new CoFrag();
 return cof;
 }

 }


 return prof;
}

@Override
public int getCount() {

 return 3;
}

}

Не могли бы вы мне помочь. Благодарю.

1 ответ

Вы должны двигаться:

process.execute(0);

to onStart или onResume (что может привести к его выполнению более одного раза, но при необходимости вы можете установить флаг для этого).

licensed under cc by-sa 3.0 with attribution.