现在的位置: 首页 > 综合 > 正文

Fragment实现两栏展示

2013年10月05日 ⁄ 综合 ⁄ 共 3050字 ⁄ 字号 评论关闭

现在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");
	}

Demo下载


抱歉!评论已关闭.