现在Fragment被使用的也比较多了,官方也在推荐使用Fragment,尤其是平板上开发显得非常的方便,这里我是在手机里展示的,可以先看一下效果图。
实现也是比较的简单,activity的布局文件里,有两个控件,一个是titles,一个是details, titles是通过指定了了对应的F绕过梦来展现的内容,Fragment本身是一个View,有自己的生命周期。这个Demo里点击titles里的目录在右侧可以显示对应的详情信息。右侧放的是一个Framlayout,在代码里通过语句
DetailsFragment df = (DetailsFragment)getFragmentManager().findFragmentById(R.id.details);
来显示DetailsFragment,把点击的位置通过,DetailsFragment里的静态方法传递过去,返回的是对应的Fragment,在得到了Fragment之后,ft.replace(R.id.details, df);将其显示出来。TitleFragment里面主要就是做了这么多工作。在DetailsFragment里面接收到对应的参数之后(getArguments().getInt("index");),把所对应的详细信息给展示出来。
public class MainActivity extends FragmentActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
public class TitleFragment extends ListFragment {
boolean mDualPane; //检验是否有DetailFragment,没有就另起一个activity
int mCurCheckPosition;
public void onSaveInstanceState (Bundle outState){
super.onSaveInstanceState(outState);
outState.putInt("curPosition", mCurCheckPosition);
}
@Override
//初始化TitleFragment
public void onActivityCreated(Bundle savedInstanceState){
super.onActivityCreated(savedInstanceState);
setListAdapter(new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1,TITLES));
View detailsFrame = getActivity().findViewById(R.id.details);
mDualPane = detailsFrame != null && detailsFrame.getVisibility()==View.VISIBLE;
if(savedInstanceState != null){
mCurCheckPosition = savedInstanceState.getInt("curPosition",0);
}
if(mDualPane){
getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
showDetails(mCurCheckPosition);
}
}
public void onListItemClick(ListView l, View v, int position, long id){
showDetails(position);
}
//显示选中Item对于的内容
private void showDetails(int position) {
int index = position;
if(mDualPane){
getListView().setItemChecked(index, true);
DetailsFragment df = (DetailsFragment)getFragmentManager().findFragmentById(R.id.details);
if(df == null || df.getShowIndex() != index){
df = DetailsFragment.newInstance(index);
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.details, df);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.commit();
}
}
}
public static final String[] TITLES =
{
"Henry IV (1)",
"Henry V",
"Henry VIII",
"Richard II",
"Richard III",
"Merchant of Venice",
"Othello",
"King Lear"
};
}
public class DetailsFragment extends Fragment{
//方法newInstance用于新建一个DetailFragment
public static DetailsFragment newInstance(int index){
DetailsFragment f = new DetailsFragment();
Bundle bundle = new Bundle();
bundle.putInt("index", index);
//给Fragment初始化参数
f.setArguments(bundle);
return f;
}
//产生显示内容的View
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState){
if(container == null){
return null;
}
ScrollView scroller = new ScrollView(getActivity());
TextView text = new TextView(getActivity());
//设置TextView边框大小
int padding = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 4, getActivity().getResources().getDisplayMetrics());
text.setPadding(padding,padding,padding,padding);
scroller.addView(text);
text.setText(DIALOGUE[getShowIndex()]);
return scroller;
}
//获取新建DetailFragment时声明的参数
public int getShowIndex(){
return getArguments().getInt("index");
}