以下哪项是实现回调的正确方法。

时间:2017-02-09 23:18:36

标签: android interface

那么问题。哪两个是进行回调的正确方法?(除非这两个都不正确)或者它取决于具体情况。

例如。让我们说我想把一些东西从Fragment返回到它的Activity。

1)我在Fragment中实现了一个接口,然后在它的onAttach上设置了监听器,然后在activity中实现了接口。

public class UrgentCareFragment{

    public interface TestListener {
       void finishedTest();
    }

    TestListener mEventListener;

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

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

        View v = inflater.inflate(R.layout.fragment_urgent_care_viewpager_fragment, container, false);

        mEventListener.finishedTest();

        return v;
    }

    @TargetApi(23)
    @Override
    public void onAttach(Context context) {
      super.onAttach(context);

       try {
         mEventListener = (TestListener) context;
       } catch (ClassCastException e) {
        throw new ClassCastException(context.toString() + " must implement urgentCareListener");
       }
     }

   /*
    * Deprecated on API 23
    * Use onAttachToContext instead
    */
   @SuppressWarnings("deprecation")
   @Override
   public void onAttach(Activity activity) {
       super.onAttach(activity);

    if (Build.VERSION.SDK_INT < 23) {
        try {
            mEventListener = (TestListener) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException(activity.toString() + " must implement urgentCareListener");
        }
     }
   }
} 

活动类。

public class testActivity extends AppCompatActivity implements TestListener{

  @Override
  protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_urgent_care);
  }

  @Override
  public void finishedTest(){
    //do what you need to do
  }

}

2)我创建了一个接口类。在Fragment中,我使用getActivity将侦听器设置为活动上下文。然后在活动中实现接口。

接口类

     public interface TestListener {
       void finishedTest();
    }

片段

public class UrgentCareFragment{

    TestListener mEventListener;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mEventListener = (TestListener) getActivity();

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

        View v = inflater.inflate(R.layout.fragment_urgent_care_viewpager_fragment, container, false);

        mEventListener.finishedTest();

        return v;
    }
} 

活动类。

public class testActivity extends AppCompatActivity implements TestListener{

  @Override
  protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_urgent_care);
  }

  @Override
  public void finishedTest(){
    //do what you need to do
  }

}

哪种方法正确?我主要关心的是听众的设置方式。这两者中的任何一个都会导致问题。或者有一个我应该扔掉。两者似乎都运作正常,我只是想确定正确的方法是什么,或两者都没问题。

谢谢

0 个答案:

没有答案