У меня есть recyclerview, имеющие разные макеты для портрета и пейзажа. Когда действие начинается, recyclerview заполняется данными независимо от ориентации. Но если ориентация изменяется, данные не отображаются. И никакие данные не показываются при последующих изменениях ориентации.Recyclerview не заполняется данными после изменения ориентации
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
Log.d("CCC", "OnCreate View called");
View view = inflater.inflate(R.layout.fragment_coach_list, container, false);
new NetworkConnector(getActivity(), coachListURL, method, null, new OnRequestComplete());
Log.d("CCC", "Network connector called");
return view;
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
Log.d("CCC", "On View created called");
//if rv is declared in oncreateview then NPE during setadapter
coachRecyclerView = (RecyclerView) getActivity().findViewById(R.id.fcoachlist_rv);
final LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity());
layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
Log.d("CCC", "orientation " + layoutManager.getOrientation());
coachRecyclerView.setLayoutManager(layoutManager);
}
private class OnRequestComplete implements RequestCompleteListener<String> {
public OnRequestComplete() {
}
@Override
public void onRequestExecuted(String responseType, String result) {
if (!responseType.equals("error")) {
try {
JSONObject jsonResponse = new JSONObject(result);
Log.d("CCC", "Result: " + result);
String coachResult = jsonResponse.getString("success");
switch (coachResult) {
case "1":
ArrayList<CoachList> coachListData = parseJSONResponse(jsonResponse);
coachListAdapter = new CoachListAdapter(getActivity());
coachListAdapter.setCoachList(coachListData);
coachRecyclerView.setAdapter(coachListAdapter);
if(coachRecyclerView.getAdapter()== null){
Log.d("CCC", "Adapter is null");
} else if (coachRecyclerView.getAdapter()== coachListAdapter){
Log.d("CCC", "Adapter is coachlistAdapter");
} else {
Log.d("CCC", "This is odd!!");
}
Log.d("CCC", "Size " + coachListAdapter.getItemCount());
break;
case "0":
Toast.makeText(getActivity(), "No trainers available currently", Toast.LENGTH_LONG).show();
break;
case "-1":
Toast.makeText(getActivity(), "Please try again later", Toast.LENGTH_LONG).show();
break;
}
} catch (JSONException e) {
Log.d("CCC", "CoachList JSONException");
}
}
}
}
NetworkConnector - это класс, выполняющий строчку volley stringrequest.
Вот logcat, когда активность запущена, и ориентация не изменяется.
03-18 07:06:57.702 30392-30392/in.jiyofit.the_app D/CCC: OnCreate View called
03-18 07:06:57.722 30392-30392/in.jiyofit.the_app D/CCC: Network connector called
03-18 07:06:57.722 30392-30392/in.jiyofit.the_app D/CCC: On View created called
03-18 07:06:57.722 30392-30392/in.jiyofit.the_app D/CCC: orientation 1
03-18 07:06:57.774 30392-30392/in.jiyofit.the_app W/EGL_genymotion: eglSurfaceAttrib not implemented
03-18 07:06:57.774 30392-30392/in.jiyofit.the_app E/RecyclerView: No adapter attached; skipping layout
03-18 07:06:57.778 30392-30392/in.jiyofit.the_app D/CCC: Result: {"success":"1","Coaches":[{"CoachID":"1","Coach_Name":"Tyler //lots of json
03-18 07:06:57.778 30392-30392/in.jiyofit.the_app D/CCC: Adapter is coachlistAdapter
03-18 07:06:57.778 30392-30392/in.jiyofit.the_app D/CCC: Size 4
03-18 07:06:57.946 30392-30488/in.jiyofit.the_app D/dalvikvm: GC_FOR_ALLOC freed 414K, 6% free 8585K/9076K, paused 8ms, total 8ms
03-18 07:06:59.426 30392-30392/in.jiyofit.the_app D/CCC: Result: {"success":"1","Coaches":[{"CoachID":"1","Coach_Name":"Tyler ...//lots of json
03-18 07:06:59.426 30392-30392/in.jiyofit.the_app D/CCC: Adapter is coachlistAdapter
03-18 07:06:59.426 30392-30392/in.jiyofit.the_app D/CCC: Size 4
Приведенный нижеописанный признак регистрации при изменении ориентации.
03-18 07:13:53.792 30392-30392/in.jiyofit.the_app D/CCC: OnCreate View called
03-18 07:13:53.796 30392-30392/in.jiyofit.the_app D/CCC: Network connector called
03-18 07:13:53.796 30392-30392/in.jiyofit.the_app D/CCC: On View created called
03-18 07:13:53.796 30392-30392/in.jiyofit.the_app D/CCC: orientation 1
03-18 07:13:53.796 30392-30392/in.jiyofit.the_app D/CCC: OnCreate View called
03-18 07:13:53.796 30392-30392/in.jiyofit.the_app D/CCC: Network connector called
03-18 07:13:53.796 30392-30392/in.jiyofit.the_app D/CCC: On View created called
03-18 07:13:53.796 30392-30392/in.jiyofit.the_app D/CCC: orientation 1
03-18 07:13:53.856 30392-30392/in.jiyofit.the_app W/EGL_genymotion: eglSurfaceAttrib not implemented
03-18 07:13:53.856 30392-30392/in.jiyofit.the_app E/RecyclerView: No adapter attached; skipping layout
03-18 07:13:53.856 30392-30392/in.jiyofit.the_app E/RecyclerView: No adapter attached; skipping layout
03-18 07:13:53.872 30392-30392/in.jiyofit.the_app D/dalvikvm: GC_FOR_ALLOC freed 554K, 7% free 9823K/10452K, paused 4ms, total 4ms
03-18 07:13:53.888 30392-30392/in.jiyofit.the_app D/CCC: Result: {"success":"1","Coaches":[{"CoachID":"1","Coach_Name":"Tyler //lots of json
03-18 07:13:53.888 30392-30392/in.jiyofit.the_app D/CCC: Adapter is coachlistAdapter
03-18 07:13:53.888 30392-30392/in.jiyofit.the_app D/CCC: Size 4
03-18 07:13:53.996 30392-30392/in.jiyofit.the_app E/RecyclerView: No adapter attached; skipping layout
03-18 07:13:54.676 30392-30392/in.jiyofit.the_app D/CCC: Result: {"success":"1","Coaches":[{"CoachID":"1","Coach_Name":"Tyler //lots of json
03-18 07:13:54.680 30392-30392/in.jiyofit.the_app D/CCC: Adapter is coachlistAdapter
03-18 07:13:54.680 30392-30392/in.jiyofit.the_app D/CCC: Size 4
03-18 07:13:54.736 30392-30392/in.jiyofit.the_app D/CCC: Result: {"success":"1","Coaches":[{"CoachID":"1","Coach_Name":"Tyler //lots of json
03-18 07:13:54.736 30392-30392/in.jiyofit.the_app D/CCC: Adapter is coachlistAdapter
03-18 07:13:54.736 30392-30392/in.jiyofit.the_app D/CCC: Size 4
Как видно, некоторые части кода вызывается повторно. Я не знаю почему. OnCreateView вызывается снова после вызова onViewCreated после изменения ориентации. Вероятно, это вызывает проблему. Любая помощь будет оценена по достоинству. Благодарю.
Вы уверены, что ваш код не добавляет несколько экземпляров этого фрагмента? – Luksprog
только один экземпляр фрагмента называется – suku
Если вы просто хотите разрешить вращение экрана, но ничего конкретного в зависимости от макета, то я считаю, что вы должны переопределить метод onConfigurationChanged в действиях. Также добавьте его в файл манифеста. Для получения дополнительной информации см. Здесь: http://stackoverflow.com/a/2418763/1750013 –