2017-09-04 3 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()

呼び出されるまで、あなたは結果を持っていない結果を待ってAsyncTaskを実行した場合

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

この​​コールは、inmediatly返すこれはfilterResult();です時間がかかる ?メインUIスレッドがブロックされている場合、UIは更新されません。

+0

"このフィルタの結果(時間)はかかりますか?"はい...私は、データがロードされている間、ユーザーが進捗バーを参照したい場合 –

+0

if filterResult(); ProgressBarが表示または更新されないUIスレッドをブロックする場合は、filterResult()を別のスレッドで実行する必要があります。 –

0

このプログレスバーをどのように機能させますか?インターネット上のgifを検索することができます.GIFは、アクティビティを開いたときに表示する必要がある条件に合ったものを見つけたら検索できます。あなたはあなたのrecyclerViewに値を設定するときにgifの可視性をGONEに設定します。

関連する問題