2014-03-19 41 views
0

在学校,我们现在正在学习如何使用接口使片段更通用。 这种技术仍然有点抽象,我不知道何时/如何使用它。通过接口将片段/活动中的数据传递给片段/活动的名称技术

任何人都可以点我的一些资源,如何使用该技术(难道是所谓的接口回调?)

所有帮助非常感谢!

+1

观看这个真棒视频,我相信你会得到它 - http://www.youtube.com/watch?v=VyyGP_d0Ia8 –

+0

@Matt在这里有什么回答对你有用吗?如果是这样,如果其中一个答案可以被标记为正确的,那将会很好 – Drew

回答

3

回调方法,就像你所说的那样,就像在Java或Android的许多部分中发现的Listener接口一样简单。如果你想了解一个非常一般的描述,你可以检查Observer pattern。但是,如果您已经了解如何与Listener合作,您将很容易得到关于回调的观点。

注意:不要将它与Callback term混合 - 这些是不一样的。

假设我们有ActivityMyActivityFragment MyFragment。我们想要将一些数据从Fragment发布到Activity。那就让我们MyFragment内创建一个接口:

public class MyFragment extends Fragment{ 

    private PostDataCallback mCallback;//our Activity will implement this 

    @Override 
    public void onAttach(Activity activity) { 
     super.onAttach(activity); 

     // This makes sure that the container activity has implemented 
     // the callback interface. If not, it throws an exception 
     try { 
      mCallback = (PostDataCallback) activity; 
     } catch (ClassCastException e) { 
      throw new ClassCastException(activity.toString() 
       + " must implement OnHeadlineSelectedListener"); 
     } 
    } 


    public interface PostDataCallback{ 
     public void onPostData(Object data); 
    } 

    /* 
    we trigger this method when we calculated 
     data or something like that and want to post it*/ 

    public void onSomeEvent(Object data){ 

     mCallback.onPostData(data); 
    } 
} 

我们MyActivity将这个样子:

public class MyActivity extends Activity implements MyFragment.PostDataCallback{ 

    private Object data; 

    @Override 
    protected void onCreate(Bundle savedInstanceState){ 
     getFragmentManager().beginTransaction().add(R.id.some_container_id, new MyFragment(), "my fragment"); 


    } 

    @Override 
    public void onPostData(Object data){ 
     this.data = data; 
     //some operations 

    } 

}  

所以,MyFragment一无所知它的回调实现。但它知道,它可以调用方法onPostData(Object o)PostDataCallback的实例,该实例保存在变量mCallback中。

因此,当MyFragment触发它的mCallback.onPostData(data)MyActivity获取的结果。

没错,如果我们想从MyActivity将消息发送到MyFragment同样的方法将工作,但我们会做到这一点做反之亦然:触发方法,回调接口定义和实例将驻留在MyActivity ,并且MyFragment将实现该接口。

0

您可以在eclipse中简单地创建新的Android应用程序项目。 然后用回调方法创建Android对象(Fragment)。这会给你一个接口的想法。

然后你可以申请活动的片段。

2

下面是步骤:从http://developer.android.com/training/basics/fragments/index.html(given在右侧)

  1. 下载样本数据,也看的URL如何从XML片段添加或动态地执行片段交易操作方法。

  2. 然后建议你用片段指导办理.. http://developer.android.com/guide/components/fragments.html

  3. 一旦你理解了完整的生命周期,然后它的片段回调方法将是很容易理解的例子由谷歌给出的样品。

  4. 要在片段定义调用接口或通过回调活动界面..

  5. 比方说,你有两个片段,显示列表作为文章标题和文章的细节。

  6. 在您的文章列表扩展片列表公共类片段1扩展ListFragment
  7. 坐落在oncreateview方法使用列表适配器列表视图。

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), 
    android.R.layout.simple_list_item_1, Array); 
    setListAdapter(adapter); 
    
  8. 现在我们需要显示文章的详细信息时,在文章的用户点击,因此我们需要通过位置活动,它可以调用回相应的文章细节fragment2显示。
  9. 所以当用户点击文章时,系统会调用onListItemClick回调方法。

    public void onListItemClick(ListView l, View v, int position, long id) { 
    super.onListItemClick(l, v, position, id); 
    

    来电来访接口,并通过物品位置

  10. 定义接口和传递方法,活动将覆盖位置。

    public interface OnArticleSelectedListener { 
    public void onArticleSelected(int position); 
    } 
    
  11. 在上附加方法通过铸造活动实例化界面的一个实例,如果活动没有实现的接口,那么该片段抛出一个ClassCastException。成功。

  12. 重写接口方法以显示文章详细信息,方法是将位置作为捆绑数据传递给Fragment2。

希望它能帮助您理解示例代码。