Прогресс-диалог закрывается до появления на экране, пока страница еще загружается - PullRequest
1 голос
/ 07 июня 2019

У меня есть просмотрщик firebase, в котором я пытаюсь заполнить некоторые данные из базы данных firebase. данные загружаются довольно гладко после 2 секунд начальной загрузки страницы. в то время как страница загружается изначально, она обычно отображает 2 или 3 секунды пустого экрана. Я пытался создать диалоговое окно прогресса в течение этого периода и закрыл диалоговое окно прогресса после того, как представление рециркулятора Firebase завершило извлечение данных из базы данных Firebase. но диалог прогресса никогда не появляется на первом месте. Я инициализирую диалоговое окно прогресса в методе onCreate () и закрываю диалоговое окно прогресса в методе onResume () сразу после того, как просмотрщик firebase завершил загрузку

Я пытался использовать прогресс-бар вместо диалогового окна прогресса, но проблема остается той же, что и я. Я также пытался использовать Android-обработчик и метод таймера, чтобы обеспечить его синхронизацию по умолчанию, но это статический метод и недостаточно для долгосрочного решения

    private ProgressDialog loadingBar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_search_task_list);


    // loading bar
    loadingBar = new ProgressDialog(this);
    loadingBar.setMessage("Please wait...");
    loadingBar.setCanceledOnTouchOutside(false);
    loadingBar.show();

     //Recyclerview and linear layout manager
    search_task_list_recycler = 
    findViewById(R.id.search_task_list_recycler);
    linearLayoutManager = new LinearLayoutManager(this);
    search_task_list_recycler.setHasFixedSize(true);
    linearLayoutManager.setReverseLayout(true);
    linearLayoutManager.setStackFromEnd(true);
    search_task_list_recycler.setLayoutManager(linearLayoutManager);


     }


 //   ====================================================================

     @Override
     protected void onResume() {
     super.onResume();

    // displaytask() contains the firebase recyclerview retrieval method 
    and recyclerview view 

    displayTasks();

    loadingBar.dismiss();


}


 //   ====================================================================

       private void displayTasks() {



       Query query = search_task_list;

       FirebaseRecyclerOptions<Search_task_details> options = new 
       FirebaseRecyclerOptions.Builder<Search_task_details>()
            .setQuery(query, Search_task_details.class).build();
       final FirebaseRecyclerAdapter<Search_task_details, ViewHolder> 
       adapter =
            new FirebaseRecyclerAdapter<Search_task_details, ViewHolder> 
        (options) {
                @Override
                protected void onBindViewHolder(@NonNull final ViewHolder 
      holder, int position, @NonNull final Search_task_details model) {



      UsersRef.child(model.getPoster_id()).addValueEventListener(new 
      ValueEventListener() {
                        @Override
                        public void onDataChange(@NonNull DataSnapshot 
       dataSnapshot) {
                            if (dataSnapshot.exists()) {
                                if 
      (dataSnapshot.hasChild("profile_image")) {



Picasso.get().load(dataSnapshot.child("profile_image").getValue().toString())
                                             .placeholder(R.drawable.submit_profile_image)
                                            .into(holder.search_task_user_image);
                                }
                            }
                        }

                        @Override
                        public void onCancelled(@NonNull DatabaseError databaseError) {

                        }
                    });


                    holder.search_task_topic_title.setText(model.getTopic_title());
                    holder.search_task_due_date.setText(model.getDue_date());
                    holder.search_task_preferred_timing.setText(model.getPreferred_time());
                    holder.search_task_location.setText(model.getTask_location());
                    holder.search_task_job_status.setText(model.getJob_status());
                    holder.search_task_budget.setText(model.getSum_total() + " B.D");


                    String givenDateString = model.getCurrent_calendar_Date_and_Time();
                    SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy, HH:mm", Locale.ENGLISH);
                    sdf.setTimeZone(TimeZone.getTimeZone("Asia/Bahrain"));

                    long time_in_milliseconds = 0;

                    Date date = new Date();
                    try {
                        date = sdf.parse(givenDateString);
                    } catch (ParseException e) {
                        e.printStackTrace();
                    }
                    time_in_milliseconds = date.getTime();


                    final CharSequence ch = DateUtils.getRelativeTimeSpanString(time_in_milliseconds
                            , System.currentTimeMillis(), DateUtils.MINUTE_IN_MILLIS);
                    holder.search_task_time_ago.setText(ch);



                    holder.search_task_linear_layout.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            postKey = getRef(holder.getAdapterPosition()).getKey();
                            Bundle bundle = new Bundle();
                            Intent goToTaskDetails = new Intent(Search_task_list.this, task_details.class);
                            bundle.putString("post_key", postKey);
                            bundle.putString("poster_id", model.getPoster_id());
                            goToTaskDetails.putExtras(bundle);
                            startActivity(goToTaskDetails);
                        }
                    });


                }

                @NonNull
                @Override
                public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

                    View view = LayoutInflater.from(parent.getContext())
                            .inflate(R.layout.search_task_design_details, parent, false);
                    ViewHolder viewHolder = new ViewHolder(view);
                    return viewHolder;
                }
            };


     search_task_list_recycler.setAdapter(adapter);
     adapter.startListening();



}


//================================================================

    public static class ViewHolder extends RecyclerView.ViewHolder {
    public CircleImageView search_task_user_image;
    public AppCompatTextView search_task_topic_title;
    public AppCompatTextView search_task_due_date;
    public AppCompatTextView search_task_preferred_timing;
    public AppCompatTextView search_task_location;
    public AppCompatTextView search_task_time_ago;
    public AppCompatTextView search_task_job_status;
    public AppCompatTextView search_task_budget;
    public LinearLayout search_task_linear_layout;


    public ViewHolder(View itemView) {
        super(itemView);

        search_task_user_image = itemView.findViewById(R.id.search_task_user_image);
        search_task_topic_title = itemView.findViewById(R.id.search_task_topic_title);
        search_task_due_date = itemView.findViewById(R.id.search_task_due_date);
        search_task_preferred_timing = itemView.findViewById(R.id.search_task_preferred_timing);
        search_task_location = itemView.findViewById(R.id.search_task_location);
        search_task_time_ago = itemView.findViewById(R.id.search_task_time_ago);
        search_task_job_status = itemView.findViewById(R.id.search_task_job_status);
        search_task_budget = itemView.findViewById(R.id.search_task_budget);
        search_task_linear_layout = itemView.findViewById(R.id.search_task_linear_layout);


    }
}

Требуется результат

Диалог хода выполнения должен отображаться до тех пор, пока данные базы данных переработчика базы Firebase извлекаются из базы данных Firebase. это может быть 1 или 2 секунды или более, в зависимости от других факторов, таких как скорость интернет-соединения или что-либо еще.

1 Ответ

0 голосов
/ 10 июня 2019

ПОПРОБУЙТЕ

private ProgressDialog loadingBar;

onCreate(Bundle savedInstanceState) {
     // loading bar
     loadingBar = new ProgressDialog(this);
     loadingBar.setMessage("Please wait...");
     loadingBar.setCanceledOnTouchOutside(false);
     loadingBar.show();

     displayTasks();
}

На вашем дисплее Задачи ()

private void displayTasks() 
{
    search_task_list_recycler.setAdapter(adapter);
    adapter.startListening();

    //here add
    loadingBar.dismiss();
 }

Надеюсь, это поможет вам.

...