我正在执行
的步骤http://developer.android.com/training/basics/fragments/creating.html#AddInLayout
我似乎无法弄清楚他们为什么说,“创建片段时的一个区别是你必须使用onCreateView()回调来定义布局。”但是没有使用onCreateView作为HeadlinesFragment,只使用了ArticleFragment。他们似乎都设置了布局,所以我不明白为什么不使用onCreateView。另外,fragment_container只是xml文件吗?我猜它只用在MainActivity中。代码发布在
Android Fragment Basics Tutorial
除了我在下面发布的articleFragment的代码。到目前为止,我想我明白你有一个扩展fragment活动的类,它包含片段容器和方法来切换其他片段。那么你有扩展fragment或listFragment的类的片段?但是,该网站,
显示了DONT扩展片段活动的活动示例,而不仅仅是活动,它应该包含其他片段活动。
本网站:
http://developer.android.com/reference/android/app/Fragment.html
显示了有关片段的更多信息,但是生命周期没有说明何时使用OnCreate vs onCreateView,我认为它是关于布局的东西,但它表明onCreate也开始片段所以我不肯定哪个是使用。
感谢!!!!!
package com.example.android.fragments;
import android.support.v4.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
public class ArticleFragment extends Fragment {
final static String ARG_POSITION = "position";
int mCurrentPosition = -1;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// If activity recreated (such as from screen rotate), restore
// the previous article selection set by onSaveInstanceState().
// This is primarily necessary when in the two-pane layout.
if (savedInstanceState != null) {
mCurrentPosition = savedInstanceState.getInt(ARG_POSITION);
}
// Inflate the layout for this fragment
return inflater.inflate(R.layout.article_view, container, false);
}
@Override
public void onStart() {
super.onStart();
// During startup, check if there are arguments passed to the fragment.
// onStart is a good place to do this because the layout has already been
// applied to the fragment at this point so we can safely call the method
// below that sets the article text.
Bundle args = getArguments();
if (args != null) {
// Set article based on argument passed in
updateArticleView(args.getInt(ARG_POSITION));
} else if (mCurrentPosition != -1) {
// Set article based on saved instance state defined during onCreateView
updateArticleView(mCurrentPosition);
}
}
public void updateArticleView(int position) {
TextView article = (TextView) getActivity().findViewById(R.id.article_fragment);
article.setText(Ipsum.Articles[position]);
mCurrentPosition = position;
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
// Save the current article selection in case we need to recreate the fragment
outState.putInt(ARG_POSITION, mCurrentPosition);
}
}
答案 0 :(得分:2)
如果仔细查看代码,您会看到HeadlinesFragment
和ArticleFragment
之间存在差异:
public class HeadlinesFragment extends ListFragment
public class ArticleFragment extends Fragment
当然,差异在于HeadlinesFragment
是一个ListFragment
,而不仅仅是一个普通的' Fragment
。 ListFragment
已经实现了一个默认onCreateView()
,用于加载ListView
的布局。如果要覆盖默认行为,可以编写自己的onCreateView()
方法以进行更复杂的布局。
答案 1 :(得分:2)
我了解到,由于片段生命周期与活动相关联,因此onCreate会创建活动和片段。 onCreate用于设置onCreateView设置片段布局的活动布局。
headlinesFragment没有onCreateView的原因是因为它是一个列表,它有一个预定义的布局,因此不需要重写。