我从actvity(MainActivity)调用一个片段(ImageFraggment),并在该片段上创建了一个接口。而且我在主要活动中实施了Listner。您可以在下面看到代码。
MainActivity.java
public class MainActivity extends AppCompatActivity implements ImageFragment.imageEventListener {
//Calling ImageFragment
@Override
public void eventListner(int number) {
log.d("MainActivity",number);
}
}
ImageFragment.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)。
但是现在我试图从另一个活动(另一个活动(不调用ImageFragment))监听相同的事件,如下面的代码所示。
AnotherActivity.java
public class AnotherActivity extends AppCompatActivity implements ImageFragment.imageEventListener {
//I dont call imageFragment here
@Override
public void eventListner(int number) {
log.d("AnotherActivity",number);
}
}
但是我无法使用日志打印号码,我该如何解决?我在这里错过了任何重要的事情吗?
答案 0 :(得分:0)
首先,如果您知道观察者模式,它将为您提供帮助: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”),因此,如果不调用/启动,您将无法从该活动中监听该事件。该活动的图像片段。
谢谢。