目录
在Activity中动态加载Fragment步骤
(1)、创建一个Fragment对象
(2)、获取FragmentManager的实例
(3)、开启FragmentTransaction事务
(4)、向Activity的布局器(一般为FrameLayout)中添加Fragment
(5)、通过commit()方法提交事务
案例:简易的点菜界面
效果图:
MainActivity:
package com.example.test;
import androidx.appcompat.app.AppCompatActivity;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
private FragmentTransaction beginTransaction;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 1、创建Fragment对象
FoodFragment foodFragment = new FoodFragment();
MenuFragment menuFragment = new MenuFragment();
// 2、获取FragmentManager的实例
FragmentManager fm = getFragmentManager();
// 3、开启FragmentTransaction事务
beginTransaction = fm.beginTransaction();
// 4、向Activity布局器添加两个Fragment
beginTransaction.replace(R.id.foodcontent,foodFragment);
beginTransaction.replace(R.id.menu,menuFragment);
// 5、提交事务
beginTransaction.commit();
}
}
activity_main:
<?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"
android:orientation="horizontal"
tools:context=".MainActivity">
<FrameLayout
android:id="@+id/menu"
android:layout_weight="1.5"
android:layout_width="0dp"
android:layout_height="match_parent">
</FrameLayout>
<FrameLayout
android:id="@+id/foodcontent"
android:layout_weight="3"
android:layout_width="0dp"
android:layout_height="match_parent">
</FrameLayout>
</LinearLayout>
右边的菜列表 FoodFragment代码:
package com.example.test;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import androidx.annotation.Nullable;
public class FoodFragment extends Fragment {
// 主菜
private int food_icons0[] = {R.drawable.malatang,R.drawable.xiaojidunmogu,R.drawable.jitui,R.drawable.jitui2};
private String food_name0[] = {"麻辣烫","小鸡炖蘑菇","炸鸡腿","鸡腿"};
// 青菜
private int food_icons1[] = {R.drawable.qing,R.drawable.baicai};
private String food_name1[] = {"青菜","白菜"};
// 粥
private int food_icons2[] = {R.drawable.luosifen,R.drawable.yuntun,R.drawable.baizhou,R.drawable.piduanshourouzhou,R.drawable.yumizhou};
private String food_name2[] = {"螺蛳粉","云吞","白粥","皮蛋瘦肉粥","玉米粥"};
// 汤
private int food_icons3[] = {R.drawable.jitang,R.drawable.paigutang};
private String food_name3[] = {"乌鸡汤","排骨汤"};
private String food_evaluation[] = {"月售:999 好评度99%","月售:999 好评度99%","月售:999 好评度99%","月售:999 好评度99%","月售:999 好评度99%"};
private String food_price[] = {"¥15.99","¥12.99","¥12.99","¥12.99","¥12.99"};
private String food_choice[] = {"选规格","选规格","选规格","选规格","选规格"};
private View mView;
private ListView mListView;
public MyAdapter mAdapter;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
mView = inflater.inflate(R.layout.food_menu,container,false);
initView();
return mView;
}
private void initView() {
mListView = mView.findViewById(R.id.food_menu);
mAdapter = new MyAdapter(0);
mListView.setAdapter(mAdapter);
}
public void setType(int type){
mAdapter = null;
mAdapter = new MyAdapter(type);
mListView.setAdapter(mAdapter);
}
private class MyAdapter extends BaseAdapter {
private int TYPE;
public MyAdapter (int type){
TYPE = type;
}
@Override
public int getCount() {
switch (TYPE){
case 0:
return food_icons0.length;
case 1:
return food_icons1.length;
case 2:
return food_icons2.length;
case 3:
return food_icons3.length;
default:
return 2;
}
}
@Override
public Object getItem(int position) {
switch (TYPE){
case 0:
return food_icons0[position];
case 1:
return food_icons1[position];
case 2:
return food_icons2[position];
case 3:
return food_icons3[position];
default:
return 1;
}
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
convertView = View.inflate(getActivity(),R.layout.food_item,null);
TextView foodName = convertView.findViewById(R.id.food_name);
TextView evaluates = convertView.findViewById(R.id.estimate);
ImageView food_iv = convertView.findViewById(R.id.food_icon);
TextView price = convertView.findViewById(R.id.food_price);
TextView choice =convertView.findViewById(R.id.choice);
evaluates.setText(food_evaluation[position]);
price.setText(food_price[position]);
choice.setText(food_choice[position]);
switch (TYPE){
case 0:
food_iv.setBackgroundResource(food_icons0[position]);
foodName.setText(food_name0[position]);
break;
case 1:
food_iv.setBackgroundResource(food_icons1[position]);
foodName.setText(food_name1[position]);
break;
case 2:
food_iv.setBackgroundResource(food_icons2[position]);
foodName.setText(food_name2[position]);
break;
case 3:
food_iv.setBackgroundResource(food_icons3[position]);
foodName.setText(food_name3[position]);
default:
food_iv.setBackgroundResource(food_icons0[position]);
foodName.setText(food_name0[position]);
}
return convertView;
}
}
}
food_menu:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_height="match_parent">
<ListView
android:fadingEdge="vertical"
android:divider="@color/white"
android:id="@+id/food_menu"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
food_item:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:orientation="horizontal"
android:layout_height="match_parent">
<ImageView
android:id="@+id/food_icon"
android:paddingTop="20dp"
android:paddingLeft="10dp"
android:layout_width="100dp"
android:layout_height="80dp"
/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="100dp"
android:orientation="vertical"
>
<TextView
android:paddingLeft="10dp"
android:id="@+id/food_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="卤蛋螺蛳粉"
android:textColor="@color/black"
android:textSize="18sp"
/>
<TextView
android:id="@+id/estimate"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="月售:999 好评度99%"
android:textSize="10sp"
android:paddingLeft="10dp"
/>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/food_price"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:paddingLeft="10dp"
android:text="¥20.05"
android:textColor="#CD1E1E"
android:textSize="15sp" />
<TextView
android:id="@+id/choice"
android:background="#F8DF04"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:textSize="10sp"
android:text="选规格" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
左边的菜单栏:MenuFragment代码:
package com.example.test;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import androidx.annotation.Nullable;
public class MenuFragment extends Fragment {
private String[] tips = {"推荐","折扣","进店必买","人气精选","店内招牌","热销单人餐","多人餐","加料区","饮料区","店内环境","有事联系"};
private View mView;
private ListView mListView;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
mView = inflater.inflate(R.layout.fragment_menu,container,false);
if(mView!=null){
initView();
}
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
FoodFragment foodFragment = (FoodFragment) (getActivity()).getFragmentManager().findFragmentById(R.id.foodcontent);
foodFragment.setType(position);
}
});
return mView;
}
private void initView() {
mListView = mView.findViewById(R.id.list_menu);
ArrayAdapter<String> adapter = new ArrayAdapter<>(
getActivity(),R.layout.item,R.id.text,tips);
mListView.setAdapter(adapter);
}
}
fragment_menu:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:orientation="horizontal"
android:layout_height="match_parent">
<ListView
android:listSelector="#CFC3C3"
android:background="#959090"
android:divider="#CFC3C3"
android:id="@+id/list_menu"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>
item:
<?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="wrap_content">
<TextView
android:gravity="center"
android:id="@+id/text"
android:paddingLeft="5dp"
android:layout_width="match_parent"
android:layout_height="30dp"
android:layout_gravity="center"
android:textSize="18sp"
android:textColor="@color/black"
android:text="折扣"/>
</LinearLayout>