2017-09-04 8 views
0

데이터를로드하는 동안 작업 진행률 표시 줄을 표시하고로드가 완료되면 진행률 표시 줄을 숨기려면 (GONE)! 이 코드를 시도 :데이터를로드하고 recyclerview를 채우는 동안 진행률 표시 줄을 표시하는 방법?

private void allMoment() { 
    BTN_ALL.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      try { 
       TBL_MOMENT = new TableMoment(DB_HELPER); 
      // MOMENTS = TBL_MOMENT.MOMENT_LIST(); 
       new loadTask().execute(); 
       filterResult(); 
       EDT_SEARCH.setText(""); 
      } catch (Exception e) { 
       displaySnackBar(v, "خطا:" + "\n" + e.toString()); 
      } 
     } 
    }); 
} 

및 작업 방법 (버튼 데이터를로드 클릭) :

private class loadTask extends AsyncTask<String, Integer, Boolean> { 
    @Override 
    protected void onPreExecute() { 
     PROGRESS_LOADER.setVisibility(View.VISIBLE); 
     super.onPreExecute(); 
    } 

    @Override 
    protected void onPostExecute(Boolean result) { 
     PROGRESS_LOADER.setVisibility(View.GONE); 
     adapter.notifyDataSetChanged(); 
     super.onPostExecute(result); 
    } 

    @Override 
    protected Boolean doInBackground(String... params) { 
     MOMENTS = TBL_MOMENT.MOMENT_LIST(); 
     try { 
      Thread.sleep(3000); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return null; 
    } 
} 

및 dapter와 재활용을 채우기 :

private void filterResult() { 
    try { 
     adapter = new HistoryAdapter(this, MOMENTS); 
     recyclerView.setLayoutManager(new LinearLayoutManager(this)); 
     recyclerView.setItemAnimator(new DefaultItemAnimator()); 
     recyclerView.setAdapter(adapter); 
    } catch (Exception e) { 
     displayToast(this, "خطای آداپتر:" + "\n" + e.toString()); 
    } 
} 

하지만 데이터가로드 및 채우기 recyclerview에 넣고 진행 막대를 표시하지 마십시오 이 문제를 해결하는 방법?

답변

1

당신은이 : AsyncTask.doInBackground() 반품 및 AsyncTask.onPostExecuted()

filterResult();

을 호출 될 때까지 당신이 결과이없는 결과를 기다리고 AsyncTask를 실행하는 경우

new loadTask().execute(); 
filterResult(); 
EDT_SEARCH.setText(""); 

execute() 호출, inmediatly 반환 시간이 많이 걸리는가? ... 기본 UI 스레드가 차단 된 경우 UI가 업데이트되지 않습니다.

+0

"이 필터 결과(); 시간이 많이 걸립니까?" 예 ... 데이터가로드되는 동안 사용자가 진행 막대를 보려고합니다 –

+0

if filterResult(); UI 스레드를 차단하면 ProgressBar가 표시되거나 업데이트되지 않으므로 분리 된 스레드에서 filterResult()를 실행해야합니다. –

0

어떻게 진행률 표시 줄을 사용 하시겠습니까? 인터넷에서 gif를 검색 할 수 있습니다. 일단 활동을 열 때 자신의 기준에 맞는 것을 찾으면 gif를 표시 할 수 있습니다. recyclerView를 채울 때 GIF의 가시성을 GONE으로 설정합니다.