在学校,我们现在正在学习如何使用接口使片段更通用。 这种技术仍然有点抽象,我不知道何时/如何使用它。通过接口将片段/活动中的数据传递给片段/活动的名称技术
任何人都可以点我的一些资源,如何使用该技术(难道是所谓的接口回调?)
所有帮助非常感谢!
在学校,我们现在正在学习如何使用接口使片段更通用。 这种技术仍然有点抽象,我不知道何时/如何使用它。通过接口将片段/活动中的数据传递给片段/活动的名称技术
任何人都可以点我的一些资源,如何使用该技术(难道是所谓的接口回调?)
所有帮助非常感谢!
回调方法,就像你所说的那样,就像在Java或Android的许多部分中发现的Listener
接口一样简单。如果你想了解一个非常一般的描述,你可以检查Observer pattern。但是,如果您已经了解如何与Listener合作,您将很容易得到关于回调的观点。
注意:不要将它与Callback term混合 - 这些是不一样的。
假设我们有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将实现该接口。
您可以在eclipse中简单地创建新的Android应用程序项目。 然后用回调方法创建Android对象(Fragment)。这会给你一个接口的想法。
然后你可以申请活动的片段。
下面是步骤:从http://developer.android.com/training/basics/fragments/index.html(given在右侧)
下载样本数据,也看的URL如何从XML片段添加或动态地执行片段交易操作方法。
然后建议你用片段指导办理.. http://developer.android.com/guide/components/fragments.html
一旦你理解了完整的生命周期,然后它的片段回调方法将是很容易理解的例子由谷歌给出的样品。
要在片段定义调用接口或通过回调活动界面..
比方说,你有两个片段,显示列表作为文章标题和文章的细节。
坐落在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);
}
在上附加方法通过铸造活动实例化界面的一个实例,如果活动没有实现的接口,那么该片段抛出一个ClassCastException。成功。
重写接口方法以显示文章详细信息,方法是将位置作为捆绑数据传递给Fragment2。
希望它能帮助您理解示例代码。
观看这个真棒视频,我相信你会得到它 - http://www.youtube.com/watch?v=VyyGP_d0Ia8 –
@Matt在这里有什么回答对你有用吗?如果是这样,如果其中一个答案可以被标记为正确的,那将会很好 – Drew