2017-09-26 12 views
0

私は、方向のジレンマが解決できるようにフラグメント内にasynctaskを書き込もうとしました。これまでのところ、asynctaskはうまく動作していましたが、画面の変化に関連したプログレスバーは表示されません。 以下に私のコードを添付しました。画面で が回転し、プログレスバーとのTextViewをフラグメントの向きのハンドルAsyncTask

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
} 

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.a_fragment, container, false); 
    unbinder = ButterKnife.bind(this, view); 
    setRetainInstance(true); 
    return view; 
} 

@OnClick(R.id.btn) 
public void onViewClicked() { 
    Log.w(TAG, "onBtn clicked"); 
    new URLAsyncTask().execute(); 

} 


@Override 
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
    super.onViewCreated(view, savedInstanceState); 
} 

@Override 
public void onActivityCreated(@Nullable Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    if (savedInstanceState != null) { 
     progressBar.setVisibility(View.VISIBLE); 
     tvProgress.setVisibility(View.VISIBLE); 
     progressValue = savedInstanceState.getInt("value"); 
     System.out.println(progressValue); 
     progressBar.setProgress(progressValue); 
     String rcv = savedInstanceState.getString("value2"); 
     tvProgress.setText(rcv); 

    } 
} 

@Override 
public void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    outState.putInt("value", progressBar.getProgress()); 
    outState.putString("value2", tvProgress.getText().toString()); 
} 

private class URLAsyncTask extends AsyncTask<Void, Integer, String> { 
    @Override 
    protected void onPreExecute() { 
     progressBar.setVisibility(View.VISIBLE); 
    } 

    @Override 
    protected String doInBackground(Void... voids) { 
     String result = null; 

     for (int i = 0; i <= 20; i++) { 
      SystemClock.sleep(500); 
      System.out.println("Loading..... " + i); 
      publishProgress(i); 
     } 

     result = "A dummy"; 

     return result; 
    } 

    @Override 
    protected void onProgressUpdate(Integer... values) { 
     super.onProgressUpdate(values); 
     progressBar.setProgress(values[0]); 
     progressValue = values[0]; 
     tvProgress.setText("Loading .. at % ".concat(String.valueOf(progressValue))); 
    } 

    @Override 
    protected void onPostExecute(String s) { 
     super.onPostExecute(s); 
     Log.d(TAG, "onPostExecute() : s : " + s); 
     System.out.println(TAG + " " + progressValue); 
     if (progressValue == 20) { 
      tvProgress.setText("LOADING 100 % DONE"); 
      progressBar.setVisibility(View.GONE); 
     } 
    } 
} 

} ビットのヘルプは非常に

答えて

0

をいただければ幸い私はよくあなたの問題を理解しないが、私はあなたがフラグメント内のデバイスの向きに問題があることを前提とし、その隠されますAsynTaskが再実行して間違ったパーセンテージを表示しています。 私が正しいんだ場合:次に、代わりにAsynTaskを使用して、これを試してみてください。

AsynTaskLoader

enter image description here はまた、あなたは、 (無料) Udacity`s Androidデベロッパーコース上のいくつかの品質のチュートリアルを見つけることができますhttps://www.udacity.com/course/android-basics-networking--ud843

関連する問題