Почему мой AlertDialog постоянно отображается? - PullRequest
1 голос
/ 07 мая 2020

Я попытался создать приложение, которое будет показывать горячие новости с помощью recyclerview и фрагмента, я использую newsapi.

Когда я запускаю программу, диалог alerttdialogue никогда не заканчивается. Вы можете мне помочь?

package com.addindev.projectalpha.Layouts;

import android.app.AlertDialog;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;

import com.addindev.projectalpha.Adapter.ListNewsAdapter;
import com.addindev.projectalpha.Common.Common;
import com.addindev.projectalpha.Interface.NewsService;
import com.addindev.projectalpha.Model.Article;
import com.addindev.projectalpha.Model.News;
import com.addindev.projectalpha.R;

import java.util.List;

import dmax.dialog.SpotsDialog;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;

public class ArticleFragment extends Fragment {
    AlertDialog dialog;
    NewsService mService;
    SwipeRefreshLayout swipeRefreshLayout;

    String source="",sortBy="";

    ListNewsAdapter adapter;
    RecyclerView lstNews;
    RecyclerView.LayoutManager layoutManager;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View RootView = inflater.inflate(R.layout.fragment_article, container, false);

        mService = Common.getNewsService();
        dialog = new SpotsDialog(getActivity());

        swipeRefreshLayout = (SwipeRefreshLayout)RootView.findViewById(R.id.swipeRefresh);
        swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                loadNews(source,true);
            }
        });

        lstNews =  (RecyclerView)RootView.findViewById(R.id.recycler_view);
        lstNews.setHasFixedSize(true);
        layoutManager = new LinearLayoutManager(getActivity());
        lstNews.setLayoutManager(layoutManager);
        loadNews(source,false);

        return RootView;
    }

    private void loadNews(String source, boolean isRefreshed) {
        if(!isRefreshed)
        {
            dialog.show();
            mService.getNewestArticles(Common.getAPIUrl(source,sortBy,Common.API_KEY))
                    .enqueue(new Callback<News>() {
                        @Override
                        public void onResponse(Call<News> call, Response<News> response) {
                            dialog.dismiss();

                            List<Article> item = response.body().getArticles();

                            adapter = new ListNewsAdapter(item, getActivity().getBaseContext());
                            adapter.notifyDataSetChanged();
                            lstNews.setAdapter(adapter);

                        }

                        @Override
                        public void onFailure(Call<News> call, Throwable t) {

                        }
                    });
        }
        else
        {
            dialog.show();
            mService.getNewestArticles(Common.getAPIUrl(source,sortBy,Common.API_KEY))
                    .enqueue(new Callback<News>() {
                        @Override
                        public void onResponse(Call<News> call, Response<News> response) {
                            dialog.dismiss();

                            List<Article> item = response.body().getArticles();

                            adapter = new ListNewsAdapter(item, getActivity().getBaseContext());
                            adapter.notifyDataSetChanged();
                            lstNews.setAdapter(adapter);

                        }

                        @Override
                        public void onFailure(Call<News> call, Throwable t) {

                        }
                    });
            swipeRefreshLayout.setRefreshing(false);
        }
    }

}

1 Ответ

0 голосов
/ 08 мая 2020

Это немного предположение, но вы не отклоняете диалоговое окно в onFailure.

Вы почти наверняка хотите закрыть диалоговое окно как в случае успеха , так и в случае сбоя .

...