那么问题。哪两个是进行回调的正确方法?(除非这两个都不正确)或者它取决于具体情况。
例如。让我们说我想把一些东西从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
}
}
哪种方法正确?我主要关心的是听众的设置方式。这两者中的任何一个都会导致问题。或者有一个我应该扔掉。两者似乎都运作正常,我只是想确定正确的方法是什么,或两者都没问题。
谢谢