2016-07-04 50 views
0

喜对不起,如果这是初学者的东西,但即时通讯使用嵌套的片段,所以我不能使用setretaininstance作为即时通讯旋转时真的挣扎在我的片段使用的AsyncTask有一个进度条,特别是(真),我尝试以下this快速教程这就造成了我的方法如下使用的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(); 
     } 
    } 
} 

这似乎工作,但与进度条空指针错误旋转崩溃,所以我试图改变进度找到视图getActivity( )调用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" /> 

和IM只是想引用它的片段连接后我想, 我有很多片段都需要使用相同的布局只是用不同的查询同一数据库中的所有加载这种变化,所以是最好把自己的异步和进度条静态方法,还是应该是独一无二的每个片段,以及如何处理该取向对嵌套片段

任何人都可以指向我在这个正确的方向,或者可能指出我失踪的东西

回答

1

最正确的方法是使用片段来保留异步任务的实例,通过旋转。

这里是一个链接非常简单example使其易于遵循这一技术整合到自己的应用。

+0

它的一个不错的博客帖子比你没有提到嵌套片段一次笑,但环顾四周,我认为这将真正帮助,多谢你 –

+0

你是惠康。 – Stanojkovic

相关问题