如何使用接口在片段和活动之间进行通信?

pu3pd22g  于 2021-07-07  发布在  Java
关注(0)|答案(3)|浏览(388)

我只想从mainactivity调用一个片段方法。
所以我试着使用一个接口。

  1. public interface MyInterface {
  2. void testMethod();
  3. }

在我的片段(testfragment.java)中,我实现了接口并重写了testmethod。

  1. @Override
  2. public void testMethod() {
  3. Toast.makeText(getActivity(), "Test", Toast.LENGTH_LONG).show();
  4. }

但是现在我想在onrewardedvideocompleted get被调用后立即从mainactivity调用这个方法,但是我不知道如何做。我这样试过:

  1. MyInterface myInterface = new TestFragment();
  2. myInterface.testMethod();

但这里有一个nullpointerexception:
尝试对引用toast消息的空对象引用调用虚拟方法“java.lang.string android.content.context.getpackagename()”。
如何在mainactivity中从接口调用方法而不获取nullpointerexception?
谢谢

enyaitl3

enyaitl31#

  1. public interface MyInterface {
  2. void testMethod();
  3. }
  4. class MyActivity implements MyInterface{
  5. public void testMethod(){
  6. }
  7. }

在main()中,您可以创建一个myactivity的新对象,如下所示,它将允许您访问该方法:

  1. MyActivity example= new MyActivity();
  2. example.testMethod();
htzpubme

htzpubme2#

您需要像下面那样为它创建接口

  1. public interface FilterValuePassInterface {
  2. public void onSelectedFilterValue(String name);
  3. }

片段类应该如下所示

  1. class MyFragment extends Fragment implements FilterValuePassInterface {
  2. @Override
  3. public void onAttach(@NonNull Context context) {
  4. super.onAttach(context);
  5. try {
  6. ((YOUR_ACTIVITY) getActivity()).setOnDataListener(this);
  7. } catch (Exception ex) {
  8. ex.printStackTrace();
  9. }
  10. }
  11. @Override
  12. public void onSelectedFilterValue(String name) {
  13. }
  14. }

在里面 Activity 类,则需要创建方法 setOnDataListener 把碎片初始化如下

  1. MyFragment myFragment;
  2. public void setOnDataListener(MyFragment myFragment) {
  3. this.myFragment = myFragment;
  4. }

同样,在活动内部,您可以发送来自任何单击或事件的数据,您只需要从活动调用此方法来传输以下片段中的数据

  1. YOUR_CLICK.setOnClickListener(new OnClickListener() {
  2. public void onClick(View v) {
  3. // TODO Auto-generated method stub
  4. myFragment.onSelectedFilterValue("YOUR_MSG");
  5. }
  6. });
展开查看全部
wvt8vs2t

wvt8vs2t3#

如果您想从活动到片段访问您的方法。您不需要任何接口。您只需要从片段示例调用方法。但是,如果要访问活动的方法,可以使用接口。

  1. public interface MyInterface {
  2. void testMethod();
  3. }

在你的活动中,

  1. class MyActivity implements MyInterface{
  2. void testMethod(){
  3. }
  4. }

在你的碎片里,

  1. class MyFragment extends Fragment{
  2. MyInterface myInterface;
  3. public void onActivityCreated(final Bundle savedInstanceState) {
  4. super.onActivityCreated(savedInstanceState);
  5. if (getActivity() instanceof MyActivity) {
  6. myInterface = (MyInterface) getActivity();
  7. }
  8. }
展开查看全部

相关问题