2016-07-04 3 views
0

안녕하세요 미안합니다. 초보자 용이지만 진도 막대가있는 조각에서 asynctask를 사용하는 데 정말로 어려움이 있습니다. 특히 중첩 된 조각을 사용하여 회전 할 때 특히 그렇습니다. setretaininstance (참), 내가조각에서 asynctask를 사용하여 진행 막대가있는 데이터베이스를로드합니다.

이 작동하는 것 같다
public class OneFragment extends fragment { 
private WeakReference<MyAsyncTask> asyncTaskWeakRef; 
} 

private void startNewAsyncTask() { 
    MyAsyncTask asyncTask = new MyAsyncTask(this); 
    this.asyncTaskWeakRef = new WeakReference<MyAsyncTask >(asyncTask); 
    asyncTask.execute(); 
} 

public void showProgressBar() { 
    ProgressBar progress = (ProgressBar)getActivity().findViewById(R.id.progressBarFetch); 
    progress.setVisibility(View.VISIBLE); 
    progress.setIndeterminate(true); 
} 

public void hideProgressBar() { 
    ProgressBar progress = (ProgressBar)getActivity().findViewById(R.id.progressBarFetch); 
    progress.setVisibility(View.GONE); 

} 

private class MyAsyncTask extends AsyncTask<Void, Void, Void> { 

    private WeakReference<OneFragment> fragmentWeakRef; 

    private MyAsyncTask (OneFragment fragment) { 
     this.fragmentWeakRef = new WeakReference<OneFragment>(fragment); 
    } 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     showProgressBar(); 
    } 

    @Override 
    protected Void doInBackground(Void... params) { 
     DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(getActivity(), "ADD_NEW_CARD", null); 
     SQLiteDatabase db = helper.getWritableDatabase(); 
     DaoMaster daoMaster = new DaoMaster(db); 
     DaoSession daoSession = daoMaster.newSession(); 
     addNewCardDao leaseDao = daoSession.getAddNewCardDao(); 
     QueryBuilder qb = leaseDao.queryBuilder(); 
     SharedPreferences sharedPreferences = PreferenceManager 
       .getDefaultSharedPreferences(getActivity()); 
     // Create a new boolean and preference and set it to true 
     prefString = sharedPreferences.getString("ICONS SELECTED","ORIGINAL"); 
     switch (prefString){ 
      case "ORIGINAL": 

       leaseList.clear(); 
       String[] strings1 = {"ORIGINAL", "USER"}; 
       qb.where(addNewCardDao.Properties.CardIconType.in(strings1), 
         qb.and(addNewCardDao.Properties.Type_of_type.eq("PEOPLE"), 
           addNewCardDao.Properties.Type_of_word.eq("NOUNS"))); 
       leaseList = qb.list(); 
       db.close(); 
       break; 
      case "SIMPLE": 
       leaseList.clear(); 
       String[] strings2 = {"SIMPLE", "USER"}; 
       qb.where(addNewCardDao.Properties.CardIconType.in(strings2), 
         qb.and(addNewCardDao.Properties.Type_of_type.eq("PEOPLE"), 
           addNewCardDao.Properties.Type_of_word.eq("NOUNS"))); 
       leaseList = qb.list(); 
       db.close(); 
       break; 
      case "PHOTOS": 
       leaseList.clear(); 
       String[] strings3 = {"PHOTOS", "USER"}; 
       qb.where(addNewCardDao.Properties.CardIconType.in(strings3), 
         qb.and(addNewCardDao.Properties.Type_of_type.eq("PEOPLE"), 
           addNewCardDao.Properties.Type_of_word.eq("NOUNS"))); 
       leaseList = qb.list(); 
       db.close(); 
       break; 
     } 

     return null; 
    } 

    @Override 
    protected void onPostExecute(Void response) { 
     super.onPostExecute(response); 
     if (this.fragmentWeakRef.get() != null) { 
      hideProgressBar(); 
      CardAdapterDB cardAdapterDB = new CardAdapterDB(leaseList); 
      recyclerView.setAdapter(cardAdapterDB); 
      cardAdapterDB.notifyDataSetChanged(); 
     } 
    } 
} 

아래에 있지만 진행률 막대 널 포인터 오류와 회전 충돌에 내 접근 방식의 결과 this 빠른 자습서 다음 시도는 그래서는 진행 막대가 (보기 getActivity를 찾아 변경 시도) 내가 내보기를 부풀게하는 방법 thats 때문에 rootView를 호출

View rootView = inflater.inflate(R.layout.fragment_one, container, false); 
조각이 부착 된 후

하지만이 나던은 널 포인터하지만 응용 프로그램이 시작되기 전에이 시간 다시 충돌 작동하지만 난 확실히 내 레이아웃이 진행 막대를 가지고는

<ProgressBar 
android:id="@+id/progressBarFetch" 
style="?android:attr/progressBarStyleLarge" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:indeterminate="true" /> 

메신저 단지를 참조하려고 내 생각에, 나는이 모든 변경이 모두 동일한 레이아웃을 사용하여 동일한 쿼리를 사용하여 동일한 데이터베이스에서로드하는 많은 조각을 필요로하므로 비동기 및 진행률 막대에 대해 정적 메서드를 만드는 것이 더 좋습니다. 각 조각 및 중첩 된 단편의 방향을 처리하는 방법은 무엇입니까?

can anyone 이걸 가지고 올바른 방향으로 나를 가리 키거나 실종 된 것을 지적 해주세요.

답변

1

가장 적절한 방법은 비동기 작업의 인스턴스를 회전 이상으로 유지하기 위해 조각을 사용하는 것입니다.

다음은 매우 간단하게 example에 연결되는 링크로,이 기술을 앱에 쉽게 통합 할 수 있습니다.

+0

그보다 좋은 블로그 게시물은 중첩 된 조각에 대해서는 언급하지 않았지만 주위를 둘러 보니 정말 도움이 될 것이라고 생각합니다. –

+0

당신은 건강합니다. – Stanojkovic

관련 문제