2016-12-19 3 views
3

こんにちは私の同僚は、広く使われている一般的なインターネットエラーフラグメントにコールバックを実装することを頻繁に忘れる問題があります。私は断片を喚起するときにクラスがそれを見逃していることしかわかりません。 I.アプリケーションが不思議にクラッシュし、なぜ我々は時間を浪費します。フラグメントコールバックを実装するように強制する

custom lint for androidを実装していない場合はどうすればよいですか?開発者にコールバックを実装させるにはどうすればよいですか?これはテキストを表示して引数を取らない単純な断片です。

@Override 
public void onAttach(Context context) { 
    super.onAttach(context); 
    try { 
     mNoInternetCallbackInterface = (NoInternetCallbackInterface) getActivity(); 
    } catch (ClassCastException e) { 
     throw new ClassCastException(getActivity().toString() 
       + " must implement OnFragmentInteractionListener"); 
    } 
} 



@Override 
public void onStart(){ 
    super.onStart(); 
    try { 
     mNoInternetCallbackInterface = (NoInternetCallbackInterface) getActivity(); 
    } catch (ClassCastException e) { 
     throw new ClassCastException(getActivity().toString() 
       + " must implement OnFragmentInteractionListener"); 
    } 
} 

@Override 
public void onDetach() { 
    super.onDetach(); 
    mNoInternetCallbackInterface = null; 
} 

このアクティビティでは、ここで呼び出されます。 (はい、私は私が代わりに作成するインスタンスの機能を使用する必要があります知っているが、文句を言わないこの問題を解決する)

 @Override 
     public void onError(final Throwable e) { 
      FragmentManager fragmentManager = getSupportFragmentManager(); 
      NoInternetDialogFragment mNoInternetDialogFragment = new NoInternetDialogFragment(); 
      try { 
       mNoInternetDialogFragment.show(fragmentManager, "no_internet"); 
      } catch (IllegalStateException ie) { 
       // ignore as this code is going away. 
      } 

     } 

答えて

3

あなたが親フラグメントに必要だものを入れて、他のフラグメントはfragment.Weは抽象メソッドを追加することができ、親を拡張させることができユーザーに強制的に実装させるここで

abstract public class ParentFragment extends Fragment { 
    //put anything needs to be inherited in this class 

    public void onError(final Throwable e) { 
     FragmentManager fragmentManager = getSupportFragmentManager(); 
     NoInternetDialogFragment noInternetDialogFragment = new NoInternetDialogFragment(); 
     try { 
      mNoInternetDialogFragment.show(fragmentManager, "no_internet"); 
      onErrorHandle(fragmentManager, noInternetDialogFragment); 
     } catch (IllegalStateException ie) { 
      // ignore as this code is going away. 
     } 

    } 
    abstract protect void onErrorHandle(FragmentManager e, NoInternetDialogFragment fragment); 
} 

は、子の断片です:

public class ChildFragment extends ParentFragment { 

    void onErrorHandle(FragmentManager e, NoInternetDialogFragment fragment) {//your code} 
} 

だからそれはケースを処理しますそのParentFragmentです。

+1

私が提供したコードのコピーは何ですか? – StarWind0

+1

@StarWind答えを編集しました。私にあなたに必要なものがあることを教えてください。 – Huaying

+0

ここでの混乱は、あなたが継承について答えたことです。私はこれをActivityで呼び出すので、継承/上書きすることはできません。 – StarWind0

関連する問題