2014-01-17 10 views
6

Ich habe eine FragmentTabHost mit 5 Tabs und ein Fragment in jedem. Eines der Fragmente enthält eine ListView. Wenn ich eine Aktivität auf den Stapel schiebe und zurückkomme, bleibt ListView gleich. Wenn ich Tabs ändere und zu meinem ListView-Fragment zurückkomme, ist die Liste leer. Meine Liste existiert noch so wie sie war und der Adapter und die Datenquelle sind genau gleich, aber die Tabelle zeichnet nicht.ListView leer nach Rückkehr zum Fragment

Das ist mein XML

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context=".Timeline" > 


    <ImageView 
     android:id="@+id/avatarProfile" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:scaleType="center" 
     android:src="@drawable/background_pattern" /> 

    <ListView 
     android:id="@+id/listView1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:clickable="true" 
     android:divider="@null" 
     android:dividerHeight="0dp" > 
    </ListView> 

</FrameLayout> 

Das ist mein Fragment

public class Timeline extends Fragment { 

    ListView list; 
    Context context; 
    int page = 1; 
    JSONArray array;  
    TimelineAdapter adapter; 
    boolean shouldReload = true; 

    public Timeline() { 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     context = this.getActivity(); 
     page = 1; 
     array = null; 
     getData(page); 
    } 

    public void onResume(){ 

     //((Activity) context).getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.yummmie_title_bar); 
     super.onResume(); 
     if(array != null){ 
      adapter.notifyDataSetChanged(); 

     } 


     //context = this.getActivity(); 
     //page = 1; 
     //array = null; 
     //getData(page); 

    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     return inflater.inflate(R.layout.fragment_timeline, container, false); 
    } 

    public interface OnFragmentInteractionListener { 
     // TODO: Update argument type and name 
     public void onFragmentInteraction(Uri uri); 
    } 

    public void getData(int page){ 

     RequestParams params = new RequestParams(); 

     SharedPreferences pref = context.getSharedPreferences("YUMMMIE",Context.MODE_PRIVATE); 


     params.put("idUser", pref.getString("ID_USER", null)); 
     params.put("token", pref.getString("TOKEN", null)); 
     params.put("pagina", Integer.toString(page)); 
     params.put("version", "1"); 


     MessageObject.post(params, table, "getstream"); 
    } 

    //Response handlers para login 
     AsyncHttpResponseHandler table = new AsyncHttpResponseHandler(){ 
      @Override 
      public void onSuccess(String response){ 

       try { 
        JSONArray temp = new JSONArray(response); 

        if(array == null){ 
         array = temp; 
         list = (ListView)((Activity) context).findViewById(R.id.listView1); 
         adapter = new TimelineAdapter(context,array); 
         list.setAdapter(adapter); 
         list.setOnScrollListener(scrollListener); 
        }else{ 
         shouldReload = true; 

         if(temp.length() == 0){ 
          shouldReload = false; 
         } 

         array = concatArray(array,temp); 
         adapter.jsonArray = array; 
         adapter.notifyDataSetChanged(); 
        } 


       } catch (JSONException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
      } 

      @Override 
      public void onFailure(Throwable e, String response) { 
       // Response failed :(

       try { 
        JSONObject jsonResponse = new JSONObject(response); 

        JSONArray array = jsonResponse.getJSONArray("errors"); 
        JSONObject error = array.getJSONObject(0); 
        UIHelper.sendAlert(context, error.getString("message"), error.getString("name")); 

       } catch (JSONException e1) {} 

      } 

      @Override 
      public void onFinish() { 

      } 

     }; 

     OnScrollListener scrollListener = new OnScrollListener(){ 

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

       if (visibleItemCount == totalItemCount) 
       {}else { 
        if ((firstVisibleItem + visibleItemCount) == totalItemCount && (shouldReload == true)) { 

         shouldReload = false; 
         page++; 
         getData(page); 
        } 
       } 

      } 

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

     }; 

     private JSONArray concatArray(JSONArray... arrs) 
       throws JSONException { 
      JSONArray result = new JSONArray(); 
      for (JSONArray arr : arrs) { 
       for (int i = 0; i < arr.length(); i++) { 
        result.put(arr.get(i)); 
       } 
      } 
      return result; 
     } 

} 

Antwort

0

ist zunächst einen Adapter für Ihre Listenansicht definieren. Zweitens, kontrolliere deinen Antworttyp. Ich sehe String, aber Sie können vielleicht jsonarray behandeln. Zuletzt setze deinen Adapter mylist.setadapter (adapter);

3

Ich denke, dies kann sein, weil Sie Ihre Liste in der onCreate Methode Ihrer Fragment mit getData füllen. Versuchen Sie stattdessen, Ihre Liste in onViewCreated oder onResume aufzufüllen.

+0

onResume wird nicht aufgerufen, wenn Sie während eines anderen Fragments die Zurück-Taste drücken. –

Verwandte Themen