繁体   English   中英

通过接口将数据从片段/活动传递到片段/活动的命名技术

[英]Name technique for passing data from fragment/activity to fragment/activity with interfaces

在学校,我们现在正在学习如何通过使用接口使片段更加通用。 这项技术还算是抽象的,我真的不知道何时/如何使用它。

谁能给我一些有关如何使用该技术的资源(可以称为接口回调吗?)

非常感谢所有帮助!

正如您所称, 回调方法与Java或Android的许多部分中的Listener接口一样简单。 如果您想了解非常笼统的描述,可以检查Observer模式 但是,如果您已经了解如何使用Listener,那么您将很容易理解回调

注意:请勿将其与Callback术语混用-这些是不同的。

假设我们有Activity MyActivityFragment 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将实现该接口。

步骤如下:

  1. http://developer.android.com/training/basics/fragments/index.html(在右侧提供)下载示例数据,并查看url,了解如何从xml添加片段或动态执行片段事务操作。

  2. 然后建议您阅读片段指南。.http: //developer.android.com/guide/components/fragments.html

  3. 一旦您了解了完整的生命周期及其片段回调方法,那么将很容易理解Google给出的示例示例。

  4. 在片段中定义接口以调用接口或将回调传递给活动。

  5. 假设您有两个片段,它们将列表显示为文章标题和文章详细信息。

  6. 在您的文章列表中扩展片段列表公共类Fragment1扩展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. 在on attach方法中,通过强制转换Activity实例化接口的实例。如果活动尚未实现接口,则该片段将引发ClassCastException。 成功。

  12. 通过将位置作为捆绑数据传递到Fragment2来显示文章详细信息的重写接口方法。

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

您可以在Eclipse中简单地创建新的Android应用程序项目。 然后使用回调方法创建Android对象(片段)。 这将使您对接口有所了解。

然后,您可以将活动申请片段化。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM