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