2017-09-08 8 views
0

以下のカスタムダイアログボックスでコードをリファクタリングする必要があります。はandroid.support.v4.app.DialogFragmentをandroid.app.DialogFragmentにリファクタリングする必要があります

import android.app.Activity; 
import android.content.Intent; 
import android.support.v4.app.DialogFragment; 
import android.support.v4.app.Fragment; 
import android.util.Log; 

public class BaseDialogFragment extends DialogFragment { 
    public BaseActivity parentActivity; 

    protected void showMessage(String title, String message) { 
     MessageDialogFragment dialog = MessageDialogFragment.newInstance(title, message); 
     dialog.setCancelable(false); 
     dialog.show(parentActivity.getSupportFragmentManager(), MessageDialogFragment.TAG); 
    } 

    //... 

    @Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     if (getChildFragmentManager().getFragments() != null) { 
      for (Fragment fragment : getChildFragmentManager().getFragments()) { 
       if (fragment != null) { 
        fragment.onActivityResult(requestCode, resultCode, data); 
       } 
      } 
     } 
    } 
} 

そして、私はそれを変換したい:

android.support.v4.app.DialogFragment; 
android.support.v4.app.Fragment; 

へ:

android.app.DialogFragment; 
android.app.Fragment; 

そして、私はそれを正しいリライトこれを行うことはできません。

for (Fragment fragment : getChildFragmentManager().getFragments()) { 
       if (fragment != null) { 
        fragment.onActivityResult(requestCode, resultCode, data); 
       } 
      } 

、教えてくださいをそれを正しく行う方法。

+0

こんにちはニコラス、まず、なぜあなたはあなたのコードをリファクタリングする必要がありますか?次に、私は最後の部分を理解していない、あなたのコードのこの部分をリファクタリングすることはできません:for(フラグメントフラグメント:getChildFragmentManager().getFragments()){ if(フラグメント!= null){ フラグメント。 onActivityResult(requestCode、resultCode、data); } } – Arrabidas92

+0

こんにちはArrabidas92、私たちのアプリがminSdkVersion 17をサポートしているためリファクタリングする必要があります。そして、はい、私は私のコードのこの部分をリファクタリングすることはできません... –

+0

まあ、私はいつも元のものと比較してサポートライブラリを維持する方が良いと聞いています。問題は、私が考えるフラグメントのリストを提供することができる "通常の"ライブラリにはメソッドがないということです。通常のAPIの場合は、次のようなものがあります: "for(フラグメントフラグメント:getFragmentManager()。getFragment(バンドルバンドル、String TAG)){ if(フラグメント!= null){ fragment.onActivityResult(requestCode、resultCode、data) ; } } – Arrabidas92

答えて

0

私は解決策を見つけましたが、私はそれについて完全にはわかりません。私はあなたのコメントを見たい。

は、ここではリストのフラグメントを追加します。

private List<WeakReference<Fragment>> fragList = new ArrayList<>(); 

    public List<Fragment> getActiveFragments() { 
     ArrayList<Fragment> ret = new ArrayList<>(); 
     for (WeakReference<Fragment> ref : fragList) { 
      Fragment f = ref.get(); 
      if (f != null) { 
       if (f.isVisible()) { 
        ret.add(f); 
       } 
      } 
     } 
     return ret; 
    } 

    @Override 
    public void onAttach(Activity act) { 
     super.onAttach(act); 
     if (act instanceof BaseActivity) { 
      parentActivity = (BaseActivity) act; 
      fragList.add(new WeakReference(getActiveFragments())); 
     } 
    } 

そして、ここに私はこのようなリファクタリング:

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (getChildFragmentManager().getBackStackEntryCount() > 0) { 
     for (WeakReference<Fragment> fragmentWeakReference : fragList) { 
      fragmentWeakReference.get().onActivityResult(requestCode, resultCode, data); 
     } 
    } 
} 
関連する問題