2017-06-20 37 views
0

我決定在加載數據時使用AsyncTaskLoader進行生命週期感知。 它成功創建,但旋轉我的設備時出現了一個問題,我的ProgressBar被解散並不再顯示。ProgressBar在AsyncTaskLoader中旋轉設備時被駁回

我知道它,因爲活動重新創建並再次執行onCreate()。 但我不知道哪裏來處理,我認爲它已經被initLoader

public class MainActivity extends AppCompatActivity implements 
     LoaderManager.LoaderCallbacks<String> { 

    public static final String TAG = MainActivity.class.getSimpleName(); 
    public static final int LOADER_ID = 92; 

    public static final String SEARCH_VALUE = "java"; 
    public static final String ARG_GITHUB_URL = "github_search_url"; 

    @BindView(R.id.tv_results) TextView mResultTextView; 
    @BindView(R.id.pb_loading_indicator) ProgressBar mLoadingIndicatorProgressBar; 

    Bundle mBundle; 

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

     ButterKnife.bind(this); 
     mBundle = new Bundle(); 

     // Initiate Loader at the first time 
     // when onCreate called (rotate device) 
     URL searchUrl = NetworkUtils.buildUrl(SEARCH_VALUE); 
     mBundle.putString(ARG_GITHUB_URL, searchUrl.toString()); 

     getSupportLoaderManager().initLoader(LOADER_ID, mBundle, this); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     MenuInflater menuInflater = getMenuInflater(); 
     menuInflater.inflate(R.menu.main, menu); 

     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     int menuItemId = item.getItemId(); 

     if (menuItemId == R.id.action_reload) { 
      loadGithubRepository(); 
     } 

     return super.onOptionsItemSelected(item); 
    } 

    private void loadGithubRepository() { 
     Log.e(TAG, "loadGithubRepository: Start load github repository"); 
     mResultTextView.setText(""); 

//  URL searchUrl = NetworkUtils.buildUrl(repoName); 
//  new GithubRepositoryTask().execute(searchUrl); 

     LoaderManager loaderManager = getSupportLoaderManager(); 
     if (null == loaderManager.getLoader(LOADER_ID)) { 
      getSupportLoaderManager().initLoader(LOADER_ID, mBundle, this); 
     } else { 
      getSupportLoaderManager().restartLoader(LOADER_ID, mBundle, this); 
     } 
    } 

    // Implement Loader Callback method 
    @Override 
    public Loader<String> onCreateLoader(int id, final Bundle args) { 
     return new AsyncTaskLoader<String>(this) { 
      @Override 
      protected void onStartLoading() { 
       mLoadingIndicatorProgressBar.setVisibility(View.VISIBLE); 

       if (args != null) 
        forceLoad(); 
      } 

      @Override 
      public String loadInBackground() { 
       String response = null; 
       Log.d(TAG, "loadInBackground: " + (args != null)); 
       if (args != null) { 
        try { 
         Log.d(TAG, "loadInBackground: " + args.getString(ARG_GITHUB_URL)); 
         URL url = new URL(args.getString(ARG_GITHUB_URL)); 
         response = NetworkUtils.getResponseFromHttp(url); 
        } catch (Exception e) { 
         e.printStackTrace(); 
        } 
       } 

       return response; 
      } 
     }; 
    } 

    @Override 
    public void onLoadFinished(Loader<String> loader, String data) { 
     mLoadingIndicatorProgressBar.setVisibility(View.INVISIBLE); 

     if (data != null && !data.equals("")) { 
      mResultTextView.setText(data); 
     } 
    } 

    @Override 
    public void onLoaderReset(Loader<String> loader) { 
     // Do nothing... 
    } 
} 

處理如何處理這個問題?

+0

此線在你的清單文件,其中的活性聲明的android:如何保存/活性恢復數據

更多信息。 –

回答

3
您的活動

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 

} 

//內

//清單中

<activity 
     android:name=".activities.YourActivity" 
     android:label="@string/title_activity" 
     android:configChanges="orientation|screenSize" 
     android:windowSoftInputMode="stateHidden|adjustResize" /> 

這不是再現活動佈局。

+0

如果禁用了活動的重新創建,那麼當屏幕旋轉onConfigurationChanged()調用時重新使用AsyncTaskLoader –

+0

是沒有意義的,因此重新創建加載器getSupportLoaderManager()。initLoader(LOADER_ID,mBundle,this);在這。 – Vij

0

它發生,因爲你的佈局重新

可能會有所幫助,正如我的理解,默認進度是不可見的。您必須保存活動的加載狀態並在恢復實例狀態後爲ProgressBar設置可見性。 configChanges =「|屏幕尺寸方向」: https://stackoverflow.com/a/151940/2504274