У меня есть список во фрагменте с пользовательским адаптером, загружающим список продуктов из моей базы данных mysql. Когда я впервые перехожу к фрагменту из своего навигационного ящика, он не показывает никаких элементов, но то же самое печатается в журнале. Но когда один и тот же фрагмент инициируется во второй раз, все элементы видны. Вот мой код из onCreateView() фрагмента:
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_view_complain, container, false);
sharedPreferences = getActivity().getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);
new BackgroundViewComplainTask().execute();
jsonString = sharedPreferences.getString("complain", "");
complainList = (ListView)view.findViewById(R.id.list);
addComplain = (Button)view.findViewById(R.id.addComplain);
String productName, serial, complainType, complainMessage, added_on;
viewComplainAdapter = new ViewComplainAdapter(this.getActivity(), R.layout.complain_layout);
try {
Log.d("json",jsonString);
jsonObject = new JSONObject(jsonString);
jsonArray = jsonObject.getJSONArray("server_response");
int count = 0;
ViewComplainsList viewComplainsList;
while (count<jsonArray.length()){
JSONObject JO = jsonArray.getJSONObject(count);
productName = JO.getString("productName");
serial = JO.getString("serial");
complainType = JO.getString("complainType");
complainMessage = JO.getString("complainMessage");
added_on = JO.getString("added_on");
viewComplainsList = new ViewComplainsList(complainMessage, complainType, productName, serial, added_on);
viewComplainAdapter.add(viewComplainsList);
count++;
}
complainList.setAdapter(viewComplainAdapter);
viewComplainAdapter.notifyDataSetChanged();
} catch (JSONException e) {
e.printStackTrace();
}
if(jsonString.isEmpty()){
Toast.makeText(getActivity(),"No Complains found",Toast.LENGTH_LONG).show();
this.startActivity(new Intent(getActivity(), MainActivity.class));
}
addComplain.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction().replace(R.id.main_activity_frame, new AddComplainFragment()).addToBackStack("complainFragment").commit();
}
});
return view;
}
jsonString печатается в журнале.
Вот мой журнал активности:
Я решил это... Проблема была в последовательности выполнения. После вызова Asynctask я не стал ждать его завершения, а заполнил список, прежде чем получить строку json с сервера. Решил это, заполнив список в методе onPostExecute Asynctask. Спасибо тем, кто пытался мне помочь.