[英]Name technique for passing data from fragment/activity to fragment/activity with interfaces
在学校,我们现在正在学习如何通过使用接口使片段更加通用。 这项技术还算是抽象的,我真的不知道何时/如何使用它。
谁能给我一些有关如何使用该技术的资源(可以称为接口回调吗?)
非常感谢所有帮助!
正如您所称, 回调方法与Java或Android的许多部分中的Listener
接口一样简单。 如果您想了解非常笼统的描述,可以检查Observer模式 。 但是,如果您已经了解如何使用Listener,那么您将很容易理解回调 。
注意:请勿将其与Callback术语混用-这些是不同的。
假设我们有Activity
MyActivity和Fragment
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将实现该接口。
步骤如下:
从http://developer.android.com/training/basics/fragments/index.html(在右侧提供)下载示例数据,并查看url,了解如何从xml添加片段或动态执行片段事务操作。
然后建议您阅读片段指南。.http: //developer.android.com/guide/components/fragments.html
一旦您了解了完整的生命周期及其片段回调方法,那么将很容易理解Google给出的示例示例。
在片段中定义接口以调用接口或将回调传递给活动。
假设您有两个片段,它们将列表显示为文章标题和文章详细信息。
使用oncreateview方法中的列表适配器设置列表视图。
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, Array); setListAdapter(adapter);
因此,当用户单击文章时,系统将调用onListItemClick回调方法。
public void onListItemClick(ListView l, View v, int position, long id) { super.onListItemClick(l, v, position, id);
在此处调用界面并传递文章位置
在方法中定义接口并传递位置,该方法将覆盖哪些活动。
public interface OnArticleSelectedListener { public void onArticleSelected(int position); }
在on attach方法中,通过强制转换Activity实例化接口的实例。如果活动尚未实现接口,则该片段将引发ClassCastException。 成功。
通过将位置作为捆绑数据传递到Fragment2来显示文章详细信息的重写接口方法。
希望它能帮助您理解示例代码。
您可以在Eclipse中简单地创建新的Android应用程序项目。 然后使用回调方法创建Android对象(片段)。 这将使您对接口有所了解。
然后,您可以将活动申请片段化。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.