когда активный фрагмент кликается и не загружает данные - PullRequest
0 голосов
/ 12 февраля 2020

Итак, я создал простое приложение, используя шаблон активности в навигационном ящике и вид в нем переработчика

. В приложении есть 3 меню в навигационном ящике, меню Домой , Галерея и tools .

при первом запуске приложения оно будет указывать на Home с фрагментом home, то есть показывать содержимое, которое я получил от JSON в публичных API. когда я вхожу в меню галереи или инструмент и возвращаюсь в главное меню, то содержимое, которое я получаю, может безопасно отображаться. но когда я нахожусь в главном меню и щелкаю по главному меню в навигации по ящикам, оно отображает загрузку, но содержимое, которое я должен получить, не отображается, а результаты просмотра фрагмента и повторного просмотра отображают пустую страницу.

это код из моего домашнего фрагмента

package com.badjing.navdrawer.ui.home;

import ...

public class HomeFragment extends Fragment {

    private List<PostsModel> postsArrayList = new ArrayList<>();
    private ProgressDialog pDialog;

    private SwipeRefreshLayout pullToRefresh;

    RecyclerView recyclerView;
    LinearLayoutManager linearLayoutManager;
    PostsAdapter postAdapter;

    private Config config = new Config();
    String URL_FIX;

    public View onCreateView(final LayoutInflater inflater, @Nullable final ViewGroup container, @Nullable final Bundle savedInstanceState) {

        urlBuilder();

        refreshData();

        return inflater.inflate(R.layout.fragment_home, container, false);

    }

    private void refreshData() {
        new getContent().execute();
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        refreshData();

        recyclerView = (RecyclerView) getActivity().findViewById(R.id.post_recycle_view);
        linearLayoutManager = new LinearLayoutManager(getContext());
        postAdapter = new PostsAdapter(getContext(), postsArrayList);

        recyclerView.setLayoutManager(linearLayoutManager);
        recyclerView.smoothScrollToPosition(recyclerView.getBottom());
        recyclerView.setAdapter(postAdapter);

    }

    class getContent extends AsyncTask<Void, Void, Void> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            // Showing progress dialog
            pDialog = new ProgressDialog(getActivity());
            pDialog.setMessage("Please wait...");
            pDialog.setCancelable(false);
            pDialog.show();

        }

        @Override
        protected void onPostExecute(Void aVoid) {
            super.onPostExecute(aVoid);

            postAdapter.notifyDataSetChanged();
            recyclerView.invalidate();
            pDialog.dismiss();
        }

        @Override
        protected Void doInBackground(Void... voids) {
            HttpHandler sh = new HttpHandler();

            // Making a request to url and getting response
            String jsonStr = sh.makeServiceCall(URL_FIX);

            if (jsonStr != null) {

                try{

                    JSONObject jsonObj = new JSONObject(jsonStr);

                    JSONObject feed = jsonObj.getJSONObject("feed");
                    JSONArray entry = feed.getJSONArray("entry");


                    for (int i = 0; i < entry.length(); i++) {

                        PostsModel postsModel = new PostsModel();

                        // split date
                        String [] updatedDate  = entry.getJSONObject(i).getJSONObject("updated").getString("$t").split("T");

                        postsModel.setTitle(entry.getJSONObject(i).getJSONObject("title").getString("$t"));
                        postsModel.setThumbnail(entry.getJSONObject(i).getJSONObject("media$thumbnail")
                                .getString("url")
                                .replace("s72-c", "s1600"));
                        postsModel.setUpdatedDate(" " + updatedDate[0]);

                        postsArrayList.add(postsModel);

                    }

                } catch (final JSONException e) {
                    Log.e("RESPONSE", "Json parsing error: " + e.getMessage());
                    getActivity().runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            Toast.makeText(getContext(),
                                    "Json parsing error: " + e.getMessage(),
                                    Toast.LENGTH_LONG)
                                    .show();
                        }
                    });
                }

            } else {
                Log.e("RESPONSE", "Couldn't get json from server.");
                getActivity().runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Toast.makeText(getContext(),
                                "Couldn't get json from server. Check LogCat for possible errors!",
                                Toast.LENGTH_LONG)
                                .show();
                    }
                });
            }

            return null;
        }

    }

    private void urlBuilder() {
        URL_FIX = Config.BLOG_URL
                + Config.BLOG_URL_MAX_RESULT
                + Config.MAX_RESULT             // max result number
                + config.BLOG_URL_START_INDEX
                + config.START_INDEX            // Start Index number
                + config.BLOG_URL_ALT_TYPE;;
    }

}

Как мне решить проблему, если я нахожусь в главном меню и щелкаю по главному меню, оно перезагрузит существующий контент .

спасибо за внимание и помощь

...