Fragment详解(一)--->核心基础以及Fragment与Activity传递数据完整示例
发布日期:2021-06-30 11:13:47 浏览次数:2 分类:技术文章

本文共 4524 字,大约阅读时间需要 15 分钟。

MainActivity如下:

package cc.testsimplefragment0;import android.os.Bundle;import android.app.Activity;import android.app.FragmentTransaction;import cc.testsimplefragment0.TitlesListFragment.TitlesListFragmentCallBack;/** * Demo描述: * Fragment基本使用以及Fragment与Activity之间数据的传递 *  * 参考资料: * Android疯狂讲义(第二版) *  * 备注说明: * 利用接口实现Fragment与Activity的信息传递. * 这个思路是不错的. * 在此总结一下Fragment与Activity之间交换数据的方式: * 1 Activity向Fragment传递数据 *   fragment.setArguments(bundle) * 2 Fragment向Activity传递数据 *   在Fragment内部定义一个回调接口.让包含该Fragment的 *   Activity实现该接口.这样Fragment就可调用该回调方法 *   将数据传给Activity *  */public class MainActivity extends Activity implements TitlesListFragmentCallBack{	@Override	protected void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		setContentView(R.layout.main);			}	//实现TitlesListFragmentCallBack接口中的方法	@Override	public void onItemSelected(int index) {		DetailFragment detailFragment=new DetailFragment();		Bundle bundle=new Bundle();		bundle.putInt(Data.ID, index);		//向detailFragment传入参数		detailFragment.setArguments(bundle);				//开始Fragment的事务Transaction		FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();		//替换容器(container)原来的Fragment		fragmentTransaction.replace(R.id.relativeLayoutContainer, detailFragment); 		//设置转换效果		fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); 		//将事务添加到Back栈.即按下Back键时回到替换Fragment之前的状态.类似于Activity的返回		fragmentTransaction.addToBackStack(null);		//提交事务		fragmentTransaction.commit(); 	}	}

TitlesListFragment如下:

package cc.testsimplefragment0;import android.app.Activity;import android.app.ListFragment;import android.os.Bundle;import android.view.View;import android.widget.ArrayAdapter;import android.widget.ListView;/** * 备注说明: * 因为是继承自ListFragment * 所以不用覆写onCreateView()方法 * */public class TitlesListFragment extends ListFragment {	private TitlesListFragmentCallBack mTitlesListFragmentCallBack;	@Override	public void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		//设置适配器		ArrayAdapter
arrayAdapter= new ArrayAdapter
(getActivity(),android.R.layout.simple_list_item_checked, Data.TITLES); setListAdapter(arrayAdapter); } //当该Fragment被添加,显示到Activity时调用该方法 //在此判断显示到的Activity是否已经实现了接口 @Override public void onAttach(Activity activity) { super.onAttach(activity); if (!(activity instanceof TitlesListFragmentCallBack)) { throw new IllegalStateException("TitlesListFragment所在的Activity必须实现TitlesListFragmentCallBack接口"); } mTitlesListFragmentCallBack=(TitlesListFragmentCallBack) activity; } //当该Fragment从它所属的Activity中被删除时调用该方法 @Override public void onDetach() { super.onDetach(); mTitlesListFragmentCallBack=null; } //点击ListFragment中某个条目时调用该方法 @Override public void onListItemClick(ListView l, View v, int position, long id) { super.onListItemClick(l, v, position, id); mTitlesListFragmentCallBack.onItemSelected(position); //设置ListView为单选模式 getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE); //显示选中的条目 getListView().setItemChecked(position, true); } //定义一个业务接口 //该Fragment所在Activity需要实现该接口 //该Fragment将通过此接口与它所在的Activity交互 public interface TitlesListFragmentCallBack{ public void onItemSelected(int index); }}

DetailFragment如下:

package cc.testsimplefragment0;import android.app.Fragment;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.TextView;public class DetailFragment extends Fragment {	private int id=0;	@Override	public void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		if (getArguments().containsKey(Data.ID)) {			id=getArguments().getInt(Data.ID);		}	}		@Override	public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {		View view=inflater.inflate(R.layout.detail_fragment, container, false);		TextView titleTextView=(TextView) view.findViewById(R.id.titleTextView);		titleTextView.setText(Data.TITLES[id]);				TextView detailTextView=(TextView) view.findViewById(R.id.detailTextView);		detailTextView.setText(Data.DETAILS[id]);				return view;	}}

Data如下:

package cc.testsimplefragment0;public final class Data {	public static final String ID="id";	//标题    public static final String[] TITLES = { "标题1","标题2", "标题3","标题4"};    //内容    public static final String[] DETAILS = { "内容1","内容2", "内容3","内容4"};}

main.xml如下:

detail_fragment.xml如下:

AndroidManifest.xml如下:

 

转载地址:https://it9527.blog.csdn.net/article/details/12461273 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:ActionBar详解(七)--->ActionProvider使用示例
下一篇:Fragment详解(二)--->生命周期详解

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月15日 22时20分02秒