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

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

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

public interface MyInterface {
        void testMethod();
}

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

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

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

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

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

enyaitl3

enyaitl31#

public interface MyInterface {
    void testMethod();
}

class MyActivity implements MyInterface{
    public void testMethod(){
    }
}

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

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

htzpubme2#

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

public interface FilterValuePassInterface {

    public void onSelectedFilterValue(String name);
}

片段类应该如下所示

class MyFragment extends Fragment implements FilterValuePassInterface {

   @Override
    public void onAttach(@NonNull Context context) {
        super.onAttach(context);
        try {
            ((YOUR_ACTIVITY) getActivity()).setOnDataListener(this);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    @Override
    public void onSelectedFilterValue(String name) {

    }
}

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

MyFragment myFragment;
    public void setOnDataListener(MyFragment myFragment) {

    this.myFragment = myFragment;

    }

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

YOUR_CLICK.setOnClickListener(new OnClickListener() {

       public void onClick(View v) {
        // TODO Auto-generated method stub
        myFragment.onSelectedFilterValue("YOUR_MSG");

        }
        });
wvt8vs2t

wvt8vs2t3#

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

public interface MyInterface {
        void testMethod();
}

在你的活动中,

class MyActivity implements MyInterface{
void testMethod(){
}
}

在你的碎片里,

class MyFragment extends Fragment{
MyInterface myInterface;
public void onActivityCreated(final Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        if (getActivity() instanceof MyActivity) {
            myInterface = (MyInterface) getActivity();
        }
}

相关问题