我从一个actvity(MainActivity)调用一个片段(ImageFraggment),并在该片段上创建一个接口。我还在Main活动中实现了Listner。你可以看到下面的代码。
main activity.Java
public class MainActivity extends AppCompatActivity implements ImageFragment.imageEventListener {
//Calling ImageFragment
@Override
public void eventListner(int number) {
log.d("MainActivity",number);
}
}
image fragment.Java
public class ImageFragment extends Fragment {
private imageEventListener imageEventListener;
//enter a number
//if number equal to 1
{
imageEventListener.eventListner(number);
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
imageEventListener = (imageEventListener) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString() + " must implement imageEventListener");
}
}
public interface imageEventListener {
void eventListner(int number);
}
}
此代码工作正常,意味着当用户输入1时,日志将显示它(来自mainActivity)。
但现在我试图从另一个活动(AnotherActivity)(不调用ImageFragment)中侦听同一事件,如下面的代码所示。
another activity.Java
public class AnotherActivity extends AppCompatActivity implements ImageFragment.imageEventListener {
//I dont call imageFragment here
@Override
public void eventListner(int number) {
log.d("AnotherActivity",number);
}
}
但我无法使用日志打印号码,我该如何解决这个问题?我在这里想到了什么重大的事情?
首先,如果您了解观察者模式,它将帮助您:https://sourcemaking.com/design_patterns/observer
根据观察者模式:
ImageFragment是一个主题。 MainActivity和AnotherActivity是观察者。
如果您想要收听主题中的事件,则需要先注册观察者。
看看你的ImageFragment:
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
imageEventListener = (imageEventListener) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString() + " must implement imageEventListener");
}
}
在这里,您只注册了MainActivity(您说:“它不会调用ImageFragment”),因此,如果您不调用/启动该Imagefragment,您将无法从该活动中侦听该事件那个活动。
谢谢。