2016-05-25 1 views
2

Я хочу заполнить ListFragment некоторыми данными, полученными из конечной точки API. Я сначала протестировал его с помощью ListView, который работал, но теперь изменил его на ListFragment.ListFragment остается пустым

Теперь список больше не заполнен. Я тестировал, если хэш-карта может быть пуста, но это не так.

Теперь я немного невежественны - может быть, вы можете увидеть ошибку, которую я сделал:

public class AuftrageFragment extends ListFragment { 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.auftrag_view, container, false); 
     Context context = getContext(); 
     final SharedPreferences tokenStore = context.getSharedPreferences("TokenStore", Context.MODE_PRIVATE); 
     String token = tokenStore.getString("token", null); 
     if (token == null) { 
      StartFragment start = new StartFragment(); 
      getFragmentManager().beginTransaction() 
        .replace(R.id.frame_container, start).commit(); 

     } 
     return view; 
    } 
    @Override 
    public void onActivityCreated(Bundle savedInstanceState){ 
     super.onActivityCreated(savedInstanceState); 

     String[] from = {"auftragsnummer", "schadensbild", "termin"}; 
     int[] to = new int[]{R.id.auftragsnummer, R.id.schadensbild, R.id.termin}; 

     final ArrayList<HashMap<String,String>> auftragliste = new ArrayList<HashMap<String, String>>(); 

     Response.Listener<String> responseListener = new Response.Listener<String>() { 
      @Override 
      public void onResponse(String response) { 
       try { 
        JSONArray ResponseArray = new JSONArray(response); 
        for(int i=0; i < ResponseArray.length(); i++){ 
         JSONObject responseObject = ResponseArray.getJSONObject(i); 
         String termin = responseObject.getString("termin"); 
         String schadensbild = responseObject.getString("schadensbild"); 
         String auftragsnummer = responseObject.getString("auftragsnummer"); 
         HashMap<String, String> map = new HashMap<String, String>(); 
         map.put("auftragsnummer", auftragsnummer); 
         map.put("schadensbild", schadensbild); 
         map.put("termin", termin); 
         auftragliste.add(map); 
        } 
       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 
      } 
     }; 
     Context context = getContext(); 
     final SharedPreferences tokenStore = context.getSharedPreferences("TokenStore", Context.MODE_PRIVATE); 
     String token = tokenStore.getString("token", null); 
     MainListRequest mainListRequest = new MainListRequest(token, responseListener, null); 
     RequestQueue queue = Volley.newRequestQueue(this.getActivity()); 
     queue.add(mainListRequest); 

     SimpleAdapter adapter = new SimpleAdapter(getActivity(), auftragliste,R.layout.auftrag_view, from, to); 
     setListAdapter(adapter); 




    } 
} 

auftrag_view.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content"> 

<TextView 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceLarge" 
    android:text="Aufträge" 
    android:id="@+id/uberschrift" 
    android:layout_gravity="center_horizontal" 
    android:gravity="center" /> 

<ListView 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/android:list" 
    android:choiceMode="singleChoice" /> 
</LinearLayout> 

Элементы, XML:

<!--?xml version="1.0" encoding="utf-8"?--> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" 
    android:baselineAligned="false"> 

    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

     <TextView 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:textAppearance="?android:attr/textAppearanceMedium" 
      android:text="Auftragsnummer" 
      android:id="@+id/auftragsnummer" 
      android:elegantTextHeight="true" 
      android:gravity="center" /> 

     <TextView 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:text="Schadensbild" 
      android:id="@+id/schadensbild" 
      android:layout_gravity="center_horizontal" 
      android:clickable="true" 
      android:gravity="left" /> 

     <TextView 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:text="Termin" 
      android:id="@+id/termin" /> 
    </LinearLayout> 

</LinearLayout> 
+1

Я не могу видеть notifyDatasetChanged() где угодно. Вы должны называть его на адаптере после изменения/обновления данных резервной копии. – Dexter

ответ

0

вы можете попробовать это

(id for your listView).setListAdapter(adapter); 
+0

IDE говорит мне, что у этого вида нет этого метода –

+1

auftragliste.add (Карта); Этот код написан внутри блока прослушивателя. Это означает, что ваш список пуст до тех пор, пока не будет вызван Listener. Итак, добавьте эти две строки и попробуйте после auftragliste.add (map); notifyDatasetChanged(): setListAdapter (адаптер); – Mukesh

+0

Спасибо, что это сработало: поэтому ArrayList был пуст, пока не был вызван Lisitner, но поскольку адаптер не знал об этом, он не обновил представление? –

0

У вас есть для вызова адаптера # notifyDatasetChanged()

+0

Когда я его назову? Кажется, это не имеет никакого эффекта - также оно называется notifyDataSetChanged() –

+0

После того, как вы вставили данные и, пожалуйста, сделайте этот звонок из раздела Main/UI Thread! – Kitesurfer

0

какое значение вы ожидаете в AuftrageFragment.onCreateView для «маркера»?

onActivityCreated вызывается после onCreateView, можете ли вы проверить, какой фрагмент находится в вашем контейнере? Я подозреваю, что это StartFragment

+0

токен - это токен oauth. Фрагмент внутри контейнера - StartFragment, но он также может быть другим фрагментом –

+0

Извините, я не мог очистить свою точку. если ваш основной контейнер является R.id.frame_container, вы не увидите атрибут Ауфтража, поскольку текущий видимый фрагмент - StartFragment. Проверьте свою иерархию просмотров –