1

カテゴリの数に基づいていくつかの動的UIを追加するフラグメントがあります。私は進行状況ダイアログを表示し、UIが生成されたらそれを却下する必要があります。カテゴリフェッチ処理の始めと終わりに、pd.show()とpd.hide()を呼び出しています。まだ私の進捗ダイアログは却下されていません。進行状況ダイアログがフラグメント内で破棄されない

@Override 
public void onCreate(@Nullable Bundle savedInstanceState) 
{ 

    super.onCreate(savedInstanceState); 
    setTrackedPageName(R.string.analytics_select_service); 
    pd = new ProgressDialog(getContext()); 
    pd.setIndeterminate(true); 
    pd.setMessage("Preparing information.."); 
    pd.setCancelable(false); 
    pd.show(); 


} 

@Override 
public void onAttach(Context context) 
{ 
    super.onAttach(context); 
    App.from(context).inject(this); 

    categoriesSubscription = null; 
} 

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
{ 
    View view = inflater.inflate(R.layout.fragment_service_selection, container, false); 
    if (view != null) 
    { 
     ButterKnife.inject(this, view); 

     // We're recreating the view - we must be at the top of the scrollview! 
     isScrolledDown = false; 
    } 


    return view; 
} 


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

    if (Categories.hasChildren(category)) 
    { 
     populateWithCategories(category.getChildren()); 
    } 
    else 
    { 
     categoriesSubscription = categories.list() 
       .subscribeOn(Schedulers.io()) 
       .observeOn(AndroidSchedulers.mainThread()) 
       .onErrorResumeNext(Observable.empty()) 
       .subscribe(this::populateWithCategories); 
    } 




} 

@Override 
public void onDetach() 
{ 
    super.onDetach(); 
    if (categoriesSubscription != null && !categoriesSubscription.isUnsubscribed()) 
    { 
     categoriesSubscription.unsubscribe(); 
    } 
} 

@Override 
public String getTitle() 
{ 
    return null; 
} 

@Override 
public float getDesiredActionBarElevation() 
{ 
    return isScrolledDown ? ActionBarModifyingContent.DEFAULT_ELEVATION : 0; 
} 

private void populateWithCategories(List<Category> categories) 
{ 
    for (int i = 0; i < categories.size(); i++) 
    { 
     Category category = categories.get(i); 
     if (Categories.isKnown(category) 
       && Categories.isValid(category)) 
       //&& Categories.hasAllowedGenders(category)) 
     { 
      addService(category, i); 
     } 
    } 

    getActivity().runOnUiThread(new Runnable() { 
     public void run() { 
      pd.dismiss(); 
      pd.hide(); 
      pd.cancel(); 
     } 
    }); 



} 

どこでpd.dismissまたはpd.hideまたはpd.cancelを呼び出す必要がありますか?

+0

は、データが表示されますか? –

+0

はいそれは表示されています – Ackman

答えて

1

メインスレッドでサブスクリプションが観察されるため、UIスレッドで個別に実行する必要はありません。これは代わりに、ハンドラを使用してみてください、問題が解決しない場合

private void populateWithCategories(List<Category> categories) 
{ 
    for (int i = 0; i < categories.size(); i++) 
    { 
     Category category = categories.get(i); 
     if (Categories.isKnown(category) 
       && Categories.isValid(category)) 
       //&& Categories.hasAllowedGenders(category)) 
     { 
      addService(category, i); 
     } 
    } 

    pd.dismiss(); 

} 

private void populateWithCategories(List<Category> categories) 
{ 
    for (int i = 0; i < categories.size(); i++) 
    { 
     Category category = categories.get(i); 
     if (Categories.isKnown(category) 
       && Categories.isValid(category)) 
       //&& Categories.hasAllowedGenders(category)) 
     { 
      addService(category, i); 
     } 
    } 

    new Handler().post(new Runnable(){ 

     @Override 
     public void run(){ 
      pd.dismiss(); 
     } 
    }); 
} 

・ホープこのことができます、これを確認してください。

+0

もう一度やり直す。なぜこの動作? – Ackman

+0

どのアプローチを使用していますか?最初か2番目? –

0
private void populateWithCategories(List<Category> categories) 
{ 
dismiss(); 

    for (int i = 0; i < categories.size(); i++) 
    { 
     Category category = categories.get(i); 
     if (Categories.isKnown(category) 
       && Categories.isValid(category)) 
       //&& Categories.hasAllowedGenders(category)) 
     { 
      addService(category, i); 
     } 
    } 
+0

私はもう一度解答を試みましたが、もう一度やります。 (たぶん)なぜこの動作? – Ackman

0

これが私の仕事です:

@Override 
public float getDesiredActionBarElevation() 
{ 
    return isScrolledDown ? ActionBarModifyingContent.DEFAULT_ELEVATION : 0; 
} 

private void populateWithCategories(List<Category> categories) 
{ 
    for (int i = 0; i < categories.size(); i++) 
    { 
     Category category = categories.get(i); 
     if (Categories.isKnown(category) 
       && Categories.isValid(category)) 
       //&& Categories.hasAllowedGenders(category)) 
     { 
      addService(category, i); 
     } 
    } 

    pd.dismiss(); 
    pd = null; 
関連する問題