多个片段的一个接口

Mar*_*k F 2 android android-fragments

有人可以告诉我,如果我正确解决这个问题,或者我应该走另一条路线吗?

这是一个简化的例子:我有1个Activity和2个Fragments.每个片段都有一个按钮,单击该按钮,将单击转发回活动,并在活动中弹出一个Toast.

我知道Fragment通过接口与Activity通信.但是如果我有多个具有类似接口的片段呢?例如,这里两个Fragments都使用onClick类型的接口与Activity通信

 static interface OnClickedListener{
    public void buttonClicked(View v);
}
Run Code Online (Sandbox Code Playgroud)

是不是更好

A)创建一个单独的Interface类并将其附加到两个Fragments中.例如片段1:

public class Fragment1 extends Fragment implements OnClickedListener{


private OnClickedListener clickedInterface;

public Fragment1() {
    // Required empty public constructor
}

@Override
public void buttonClicked(View v) {
}

@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);
    this.clickedInterface = (OnClickedListener)activity;
}}
Run Code Online (Sandbox Code Playgroud)

片段2:

public class Fragment2 extends Fragment implements OnClickedListener{

private OnClickedListener clickedInterface;

public Fragment2() {
    // Required empty public constructor
}

@Override
public void buttonClicked(View v) {
}

@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);
    this.clickedInterface = (OnClickedListener)activity;
}
Run Code Online (Sandbox Code Playgroud)

要么

B)创建特定片段独有的各个接口,并在MainActivity中实现那些接口,而不是如上所述的一个接口.谢谢.

Jig*_*ekh 5

首先创建实现界面中的自定义片段.

    public class CustomFragment extends Fragment implements OnClickedListener{
        public OnClickedListener clickedInterface;

        @Override
        public void buttonClicked(View v) {
        }

        @Override
        public void onAttach(Activity activity) {
             super.onAttach(activity);
             this.clickedInterface = (OnClickedListener)activity;
        }
}
Run Code Online (Sandbox Code Playgroud)

现在,您可以添加每个片段

(i)片段1

public class Fragment1 extends CustomFragment {
    ......
}
Run Code Online (Sandbox Code Playgroud)

(ii)片段2

public class Fragment2 extends CustomFragment {
    ......
}
Run Code Online (Sandbox Code Playgroud)