没有在android中调用片段的片段监听器

问题描述 投票:0回答:1

我从一个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);

     }
 }

但我无法使用日志打印号码,我该如何解决这个问题?我在这里想到了什么重大的事情?

java android
1个回答
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”),因此,如果您不调用/启动该Imagefragment,您将无法从该活动中侦听该事件那个活动。

谢谢。

© www.soinside.com 2019 - 2024. All rights reserved.