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

Android 以下哪项是实现回调的正确方法。,android,interface,Android,Interface,所以我提出了一个问题。这两种方法中哪一种是进行回调的正确方法?(除非这两种方法都不正确)还是取决于具体情况 比如说。假设我想将某个片段中的某个内容返回到它的活动中 1) 我在片段中实现一个接口,然后在其onAttach上设置侦听器,然后在活动中实现该接口 public class UrgentCareFragment{ public interface TestListener { void finishedTest(); } TestListener

所以我提出了一个问题。这两种方法中哪一种是进行回调的正确方法?(除非这两种方法都不正确)还是取决于具体情况

比如说。假设我想将某个片段中的某个内容返回到它的活动中

1) 我在片段中实现一个接口,然后在其onAttach上设置侦听器,然后在活动中实现该接口

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");
        }
     }
   }
} 
2) 我创建了一个接口类。在片段中,我使用getActivity将侦听器设置为活动上下文。然后在活动中实现接口

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 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
  }

}
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
  }

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


谢谢

嗯,我有点困惑。我在第一种方法中没有做同样的事情。每当点击这一行时,mEventListener=(TestListener)上下文。谢谢,我还是有点困惑。假设我在另一个片段中使用了第二个实现。我不应该创建另一个TestListener,然后让它的活动实现TestListener吗?所以我不确定我是否理解我将在哪一个特定的活动中施展才能。谢谢你的帮助,让我们假设我有一个类,一件事,这不是一个活动或片段。这个东西做了一些计算,我在它里面有一个TestListener listenerThing对象。我有一个方法,它有一个叫做setListener的方法,用来设置listenerThing。然后在我的一个活动或片段中,我有一个名为thingTest的对象。这个活动/片段实现了TestListener。在我的活动/片段中,我做thingTest.setListener(这个)。这里指的是活动/片段。这样行吗?谢谢。我有点困惑。我在第一种方法中没有做同样的事情。每当点击这一行时,mEventListener=(TestListener)上下文。谢谢,我还是有点困惑。假设我在另一个片段中使用了第二个实现。我不应该创建另一个TestListener,然后让它的活动实现TestListener吗?所以我不确定我是否理解我将在哪一个特定的活动中施展才能。谢谢你的帮助,让我们假设我有一个类,一件事,这不是一个活动或片段。这个东西做了一些计算,我在它里面有一个TestListener listenerThing对象。我有一个方法,它有一个叫做setListener的方法,用来设置listenerThing。然后在我的一个活动或片段中,我有一个名为thingTest的对象。这个活动/片段实现了TestListener。在我的活动/片段中,我做thingTest.setListener(这个)。这里指的是活动/片段。这样行吗?谢谢