Android Fragment使用案例

fragment加载方式

1. 静态加载( 不行,没有 试出来)

2. 动态加载

案例1: 使用上面按钮实现 Fragent的左右切换

效果图:

  Java代码  MainActivity:

***********************************************************************************************************************

public class MainActivity extends AppCompatActivity {
    LinearLayout mainContext;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mainContext = findViewById(R.id.mainContext);
        AFragment aFragment=new AFragment();
        FragmentManager manager=getFragmentManager();
        // Fragment 添加事务
        FragmentTransaction transaction= manager.beginTransaction();
        // 把Fragment 添加到指定容器中,提交才有效果
        transaction.add(R.id.mainContext,aFragment).commit();
    }

    public void  f1(View view){
        AFragment aFragment=new AFragment();
        FragmentManager manager=getFragmentManager();
        // Fragment 添加事务
        FragmentTransaction transaction= manager.beginTransaction();
        // 把Fragment 添加到指定容器中,提交才有效果
        transaction.replace(R.id.mainContext,aFragment).commit();
    }

    public void f2(View view){
        BFragment bFragment=new BFragment();
        FragmentManager manager=getFragmentManager();
        // Fragment 添加事务
        FragmentTransaction transaction= manager.beginTransaction();
        // 把当前操作添加到回退栈,点击back键盘可以回退到上一个Fragment
        transaction.addToBackStack(null);
        // 把Fragment 添加到指定容器中,提交才有效果
        // 首先 remove,然后在add
        transaction.replace(R.id.mainContext,bFragment).commit();
     //    transaction.remove(bFragment).commit();

    }
}
***********************************************************************************************************************

  activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="mk.denganzhi.com.test.MainActivity"
    android:orientation="vertical">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="f1"
            android:text="回调第一个界面" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="f2"
            android:text="f2" />

    </LinearLayout>
     <LinearLayout
         android:id="@+id/mainContext"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
         android:layout_weight="1"
         android:orientation="horizontal">

</LinearLayout>
</LinearLayout>

 BFragment


public class BFragment extends Fragment {


    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }


    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {

        View view = View.inflate(getActivity(),R.layout.afragment,null);
        Button btn1 = view.findViewById(R.id.btn1);
        btn1.setTextColor(Color.BLACK);
        btn1.setText("BFragment");
        return view;
    }
}

afragment.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:id="@+id/btn1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="aFragment......."
        tools:layout_editor_absoluteX="249dp"
        tools:layout_editor_absoluteY="112dp" />
</LinearLayout>

 案例2:ListFragment + Fragment 配合使用    

代码实现:Main2Activity 

public class Main2Activity extends FragmentActivity {


    LinearLayout fl_main_first;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        fl_main_first = findViewById(R.id.fl_main_first);

         TitleListFragment aFragment=new TitleListFragment();
         FragmentManager manager=getFragmentManager();
        // Fragment 添加事务
          FragmentTransaction transaction= manager.beginTransaction();
      // 把Fragment 添加到指定容器中,提交才有效果
          transaction.add(R.id.fl_main_first,aFragment).commit();

    }
}

布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >

    <LinearLayout
        android:id="@+id/fl_main_first"
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="match_parent"
        android:orientation="horizontal">
    </LinearLayout>

    <FrameLayout
        android:id="@+id/fl_main_container"
        android:layout_width="0dp"
        android:layout_weight="3"
        android:layout_height="match_parent" >
    </FrameLayout>

</LinearLayout>
TitleListFragment 代码实现:
package mk.denganzhi.com.test.new1;




import android.app.ListFragment;
import android.os.Bundle;

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;


import mk.denganzhi.com.test.R;


public class TitleListFragment extends ListFragment {

	public static final String[] TITLES = {"title1","title2","title3","title4","title5"};
	public static final String[] DETAILS = {"This is title1","This is title2",
			"This is title3","This is title4","This is title5"};

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
							 Bundle savedInstanceState) {
		return super.onCreateView(inflater, container, savedInstanceState);
	}

	@Override
	public void onActivityCreated(Bundle savedInstanceState) {
		super.onActivityCreated(savedInstanceState);
		
		//设置ListView为单选模式,内部封装了ListView
		getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
		
		// 给listView设置adapter显示列表
		setListAdapter(new ArrayAdapter<String>(getActivity(),
				R.layout.list_item, TITLES));
		
		//默认选中第一个item
		getListView().setItemChecked(0, true);
		//显示第一个详情
		showDetail(0);
	}
	
	@Override
	public void onListItemClick(ListView l, View v, int position, long id) {
		showDetail(position);
	}

	/**
	 * 显示指定下标的详情
	 * @param position
	 */
	private void showDetail(int position) {
		//创建DetailFragment
		DetailFragment fragment = new DetailFragment();
		//将对应的详情数据携带过去
		Bundle args = new Bundle();
		args.putString("DETAIL", DETAILS[position]);
		fragment.setArguments(args);
		//将其替换到id为fl_main_container的容器布局中
		getFragmentManager().beginTransaction().replace(R.id.fl_main_container, fragment).commit();
	}
}
DetailFragment:
package mk.denganzhi.com.test.new1;

import android.app.Fragment;
import android.os.Bundle;

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

/**
 *显示详情的Fragment
 * @author 张晓飞
 *
 */
public class DetailFragment extends Fragment {

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		TextView textView = new TextView(getActivity());
		//取出保存的数据
		String detail = getArguments().getString("DETAIL");
		//设置
		textView.setText(detail);
		return textView;
	}
}

 

  案例3:fragment生命周期:

     启动应用:onAttach  onCreate  onCreateView onActivityCreated onStart onResume
      HOME键:onPause()-->onStop()
      回到应用: onStart  onResume 
      replace为其它Fragment:onPause()-->onStop()-->onDestroyView()
返回到本身的Fragment:    onCreateView()-->onActivityCreated()-->onstart()-->onResume()
      退出应用:onPause onStop  onDestroyView  onDetach onDestroy

源码路径:https://download.csdn.net/download/dreams_deng/12254692 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值