在学校,我们现在正在学习如何通过使用界面使片段更具通用性。 这种技术仍然有点抽象,我不知道何时/如何使用它。
有人能指出一些关于如何使用该技术的资源(它可以被称为接口回调吗?)
非常感谢所有帮助!
答案 0 :(得分:4)
回调方法,正如您所说的那样,就像在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 对它的回调的实现一无所知。但它知道,它可以在 PostDataCallback 的实例上调用方法onPostData(Object o)
,该实例保存在变量mCallback
中。
因此,当 MyFragment 触发mCallback.onPostData(data)
时, MyActivity 就会得到结果。
如果我们想要将消息从 MyActivity 发送到 MyFragment ,完全相同的方法会起作用,但我们会这样做,反之亦然:触发方法,回调接口定义和实例将驻留在 MyActivity 中, MyFragment 将实现该接口。
答案 1 :(得分:3)
以下是步骤:
从右侧的http://developer.android.com/training/basics/fragments/index.html(given下载示例数据,并查看如何从xml添加片段或动态执行片段事务操作的URL。
然后会建议您使用片段指南.. 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 on attach方法通过强制转换Activity来实例化接口实例,如果活动没有实现接口,则片段抛出ClassCastException。成功。
通过将位置作为包数据传递给Fragment2来覆盖接口方法以显示文章详细信息。
希望它能帮助您理解示例代码。
答案 2 :(得分:0)
您可以在eclipse中简单地创建新的Android应用程序项目。 然后使用回调方法创建Android对象(Fragment)。这将为您提供接口的概念。
然后同样可以申请片段活动。