Fragment中Interface类的用途是什么?

时间:2017-02-13 18:31:58

标签: android android-studio android-fragments

我有一个创建的片段,无法在此片段中找到Interface类的用途...我谷歌但是找不到合适的文档?

感谢您的关注!

public class SongListFragment extends Fragment {

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

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            if (getArguments() != null) {
                songIds = getArguments().getIntArray(SONG_IDS);
            }
        }
      @Override
        public void onAttach(Context context) {
            super.onAttach(context);
            if (context instanceof OnFragmentInteractionListener) {
                mListener = (OnFragmentInteractionListener) context;
            } else {
                throw new RuntimeException(context.toString()
                        + " must implement OnFragmentInteractionListener");
            }
        }



//what's the use?  
public interface OnFragmentInteractionListener {
            public void onSongSelected(int songId);
        }
}

4 个答案:

答案 0 :(得分:2)

OnFragmentInteractionListener 可用于片段之间的communicate

  

要允许Fragment与其活动进行通信,您可以定义   Fragment类中的接口,并在其中实现它   活动。 Fragment捕获了接口实现   它的onAttach()生命周期方法然后可以调用接口   方法与活动进行沟通。

找到另一个SO示例here

答案 1 :(得分:1)

接口是Java中的引用类型。它类似于类。它是抽象方法的集合。一个类实现一个接口,从而继承接口的抽象方法。

除了抽象方法,接口还可以包含常量,默认方法,静态方法和嵌套类型。方法体仅适用于默认方法和静态方法。

编写接口类似于编写类。但是一个类描述了对象的属性和行为。接口包含类实现的行为。

除非实现接口的类是抽象的,否则需要在类中定义接口的所有方法。

您可能对here有一个简短的想法。随意询问是否有任何混乱上升! :)

因此,在您的特定情况下,您的Activity必须实现interface OnFragmentInteractionListener,否则Activity中附加的片段无法相互通信。您的活动应该是

public class YourActivity extends Activity implements OnFragmentInteractionListener

然后在您的Activity中实施方法onSongSelected(int songId) 你可以从here.获得帮助希望这有帮助!

答案 2 :(得分:0)

@Tahmid Rahman解释了界面的答案。

在这种特定情况下,接口应该在您的片段附加到的Activity中实现。这将允许片段在活动上调用onSongSelected()。然后,活动可以反过来正确处理用户请求的操作。

如果没有界面,片段就没有明确的方式告诉其父活动用户点击了一首歌。

答案 3 :(得分:0)

接口用于在事件发生时在fragmentactivity之间或多个fragments之间进行通信。

请参阅Documentation

在你的情况下:

    public static class MainActivity extends Activity
        implements SongListFragment.OnFragmentInteractionListener{
    ...

    public void onSongSelected(int songId) {  //this method must be implemented
        // The user selected the song from the list in SongListFragment
        // Do something here to display that song..in your activity
    }
}

您可以在活动中实现界面,并使用作为参数传递的歌曲ID编写onSongSelected方法。

所以基本上它用于在选择发生时将选定的歌曲列表信息传递给其他activityfragment