android: 共用一layout/主布局添加子布局

本文介绍了Android中如何在不同布局间复用同一布局文件的方法,包括静态主布局中动态添加子布局的过程及代码实现,同时提供了两种动态加载子布局的具体案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、  其他Layout共用一个layout

1.子布局适合大小;

2.主布局:<include layout="@layout/title"/>

3.调用:当前view .findViewByid得到子布局文件中的任意View 

 

二、静态主布局动态添加静态子布局

1.子布局适合大小;

2.主Layout要给子Layout设置一个容器box

3.// 子Layout要以view的形式加入到主Layout中
private View mBarView;
// 主Layout的容器加载子Layout的View
private LinearLayout mLinearLayout;

// 加载子Layout
mBarView = View.inflate(this, R.layout.main2, null);
// 找到容器
mLinearLayout = (LinearLayout)findViewById(R.id.box);
// 加上View 结束
mLinearLayout.addView(mBarView); 

 

 三、静态主布局动态加载子Layout

1.子布局适合大小;

2.构造layout类

//加载需要的属性,加载静态子Layout
((Activity) getContext()).getLayoutInflater().inflate(R.layout.main2, this);
//在此你可以封装很多方法

3.// 找到容器
mLinearLayout = (LinearLayout)findViewById(R.id.box);
// 实例化一个子View
mMenuLandscapeLinearLayout=new MenuLandscapeLinearLayout(this);
// 添加到容器
mLinearLayout.addView(mMenuLandscapeLinearLayout);

 

 Android 在其他布局里共享同一布局文件
在任意LAYOUT文件里面将其他的LAYOUT文件拿过来使用,如下:
<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout

 android:id="@+id/FrameLayout01"
        android:background="@drawable/layout_background"

 android:layout_width="fill_parent"

 android:layout_height="wrap_content"

 xmlns:android="http://schemas.android.com/apk/res/android">
   <TextViewandroid:text="欢迎你使用本软件"

android:id="@+id/TextView01"
       android:textColor="#f0f0f0"

android:layout_width="wrap_content"
      android:layout_height="wrap_content"></TextView>
</LinearLayout>

子layout 文件起名为:title。然后我们在另外的布局文件如下使用:<include  layout="@layout/title"/> 即可将title 的布局直接拿到我们当前的布局文件中。
       使用include标记将layout 放入我们当前的layout文件,也可以直接使用当前view .findViewByid得到title 布局文件中的任意View 。 

小结:子布局适合大小;

主布局:<include layout="@layout/title"/>

调用:当前view .findViewByid得到子布局文件中的任意View

 

动态加载Layout有两种方法:

方法1:静态主Layout动态加载静态子Layout

首先构建子Layout:main2 (子布局适合大小


<?xml version="1.0" encoding="utf-8"?>
<!--布局可以任意定义,此处拿线性布局举例,里面有个按钮元素-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/menubar"
android:background="@drawable/menubar"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<!--按钮-->
<ImageButton android:id="@+id/button1"
android:src="@drawable/btn1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
></ImageButton></LinearLayout>


 然后构建主Layout:main


<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/background"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/background">
<!--主Layout要给子Layout设置一个容器box,可以在此指定容器的位置,这段是关键部分-->
<LinearLayout android:id="@+id/box"
android:layout_alignParentBottom="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true">
</LinearLayout>
</RelativeLayout> 
 

最后在程序中加载子layout:

public class BackgroundTest extends Activity {
// 子Layout要以view的形式加入到主Layout中
private View mBarView;
// 主Layout的容器加载子Layout的View
private LinearLayout mLinearLayout;

//给出关键内容
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 显示主Layout
setContentView(R.layout.main);
// 加载子Layout
mBarView = View.inflate(this, R.layout.main2, null);
// 找到容器
mLinearLayout = (LinearLayout)findViewById(R.id.box);
// 加上View 结束
mLinearLayout.addView(mBarView);


 

方法2:主Layout动态加载子Layout

首先构造你自己的子Layout和上面一样;

然后构建你自定义的Layout类:


public class MenuLandscapeLinearLayout extends LinearLayout{
// 构造函数
public MenuLandscapeLinearLayout(Context context) {
super(context);
// TODO Auto-generated constructor stub
//加载需要的属性,加载方法一的子Layout
((Activity) getContext()).getLayoutInflater().inflate(R.layout.main2, this);
//在此你可以封装很多方法
}
}

最后在程序中动态实例化并加载即可:


public class BackgroundTest extends Activity {
private LinearLayout mLinearLayout;
//声明一个子Layout View对象
private MenuLandscapeLinearLayout mMenuLandscapeLinearLayout;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 加载主Layout
setContentView(R.layout.main);
// 找到容器
mLinearLayout = (LinearLayout)findViewById(R.id.box);
// 实例化一个子View
mMenuLandscapeLinearLayout=new MenuLandscapeLinearLayout(this);
// 添加到容器
mLinearLayout.addView(mMenuLandscapeLinearLayout);

}
}

至此,完成了动态加载子Layout的两种形式,里面可思考的很多,比如封装常用事件、资源,从而节省代码、节省资源;
<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:orientation="vertical" android:id="@+id/main" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/bg" tools:context=".MainActivity"> <ImageView android:layout_width="match_parent" android:layout_height="85dp" android:src="@drawable/login" android:layout_marginTop="80dp" /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="MyMUSIC" android:layout_marginTop="20dp" android:textColor="#E62C21" android:gravity="center|center_vertical|center_horizontal" android:layout_marginBottom="65dp" android:textSize="25sp" android:textStyle="bold" /> <EditText android:id="@+id/login_account" android:layout_width="match_parent" android:layout_height="wrap_content" android:textColor="#B3FFFFFF" android:layout_marginLeft="50dp" android:layout_marginRight="50dp" android:layout_marginTop="10dp" android:hint="请输入账号" android:textSize="25sp" android:textStyle="bold" android:textColorHint="#FFFFFF" android:background="@drawable/edit_login_bg" android:padding="10dp" android:drawablePadding="10dp" android:drawableLeft="@drawable/icon_login" /> <EditText android:id="@+id/login_pwd" android:layout_width="match_parent" android:layout_height="wrap_content" android:textColor="#B3FFFFFF" android:layout_marginTop="20dp" android:layout_marginLeft="50dp" android:layout_marginRight="50dp" android:hint="请输入密码" android:textSize="25sp" android:textStyle="bold" android:textColorHint="#FFFFFF" android:background="@drawable/edit_login_bg" android:padding="10dp" android:drawablePadding="10dp" android:drawableLeft="@drawable/icon_pass" android:inputType="textPassword" /> <LinearLayout android:gravity="center_horizontal|center_vertical" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="40dp" android:layout_marginLeft="50dp" android:layout_marginRight="50dp"> <Button android:id="@+id/login_denglu_btn" android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:text="登录" android:layout_marginRight="20dp" android:background="@drawable/button_login_bg" android:textColor="#FDFDFD" android:foreground="?android:attr/selectableItemBackground" /> <Button android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:text="注册" android:layout_marginLeft="20dp" android:background="@drawable/button_login_bg" android:textColor="#FDFDFD" android:foreground="?android:attr/selectableItemBackground" />
03-16
<?xml version=“1.0” encoding=“utf-8”?> <LinearLayout xmlns:android=“http://schemas.android.com/apk/res/androidandroid:layout_width=“match_parent” android:layout_height=“wrap_content” android:orientation=“vertical” android:padding=“16dp”> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="木皮名称" android:textStyle="bold" android:layout_marginBottom="4dp"/> <EditText android:id="@+id/et_mupi_name" android:layout_width="match_parent" android:layout_height="wrap_content"/> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="表面处理" android:textStyle="bold" android:layout_marginTop="16dp" android:layout_marginBottom="4dp"/> <RadioGroup android:id="@+id/rg_finish" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <RadioButton android:id="@+id/rb_painted" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="有油漆" android:checked="true"/> <RadioButton android:id="@+id/rb_unpainted" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="无油漆" android:layout_marginStart="16dp"/> </RadioGroup> </LinearLayout><?xml version=“1.0” encoding=“utf-8”?> <LinearLayout xmlns:android=“http://schemas.android.com/apk/res/androidandroid:layout_width=“match_parent” android:layout_height=“wrap_content” android:orientation=“vertical” android:padding=“16dp”> <!-- 材质选择部分 (带新建按钮) --> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="材质选择" android:textStyle="bold" android:layout_marginBottom="4dp"/> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:gravity="center_vertical"> <Spinner android:id="@+id/spinner_caizhi" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:padding="8dp"/> <Button android:id="@+id/btn_new_caizhi" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="新建" android:layout_marginStart="8dp" android:paddingHorizontal="8dp"/> </LinearLayout> <!-- 木皮选择部分 (带共用新建按钮) --> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="木皮1选择" android:textStyle="bold" android:layout_marginTop="16dp" android:layout_marginBottom="4dp"/> <Spinner android:id="@+id/spinner_mupi1" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="8dp"/> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="木皮2选择" android:textStyle="bold" android:layout_marginTop="16dp" android:layout_marginBottom="4dp"/> <Spinner android:id="@+id/spinner_mupi2" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="8dp"/> <!-- 共用的新建木皮按钮 --> <Button android:id="@+id/btn_new_mupi" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="新建木皮" android:layout_marginTop="8dp" android:layout_gravity="end"/> <!-- 厚度设定部分 --> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="厚度设定" android:textStyle="bold" android:layout_marginTop="16dp" android:layout_marginBottom="4dp"/> <EditText android:id="@+id/edittext_houdu" android:layout_width="match_parent" android:layout_height="wrap_content" android:ems="10" android:gravity="start|top" android:inputType="numberDecimal"/> </LinearLayout>package com.example.kucun2.ui.jinhuo; import android.app.AlertDialog; import android.app.DatePickerDialog; import android.app.ProgressDialog; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.Button; import android.widget.EditText; import android.widget.RadioGroup; import android.widget.SearchView; import android.widget.Spinner; import android.widget.Toast; import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; import com.example.kucun2.R; import com.example.kucun2.entity.*; import com.example.kucun2.entity.data.Data; import com.example.kucun2.entity.data.ReflectionJsonUtils; import com.example.kucun2.function.Adapter; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; import java.util.Locale; import java.util.stream.Collectors; public class AddInventoryFragment extends Fragment { // UI组件声明 private Spinner spinnerDingdan, spinnerChanpin, spinnerZujian, spinnerBancai; private EditText etShuliang; private RadioGroup rgType; private Button btnNewDingdan, btnAddChanpin, btnAddZujian; private ProgressDialog progressDialog; // 添加进度条 // 当前选中项 private Dingdan selectedDingdan; private Chanpin selectedChanpin; private Zujian selectedZujian; private Bancai selectedBancai; private View rootView; // 日期格式化工具 private final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()); private static final String TAG = "AddInventoryFragment"; @Override public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { rootView = inflater.inflate(R.layout.fragment_add_inventory, container, false); initViews(rootView); setupEventListeners(); // 初始化下拉框数据(使用已加载的数据) setupSpinnersWithExistingData(); return rootView; } /** 初始化UI组件 */ private void initViews(View view) { spinnerDingdan = view.findViewById(R.id.spinner_dingdan); spinnerChanpin = view.findViewById(R.id.spinner_chanpin); spinnerZujian = view.findViewById(R.id.spinner_zujian); spinnerBancai = view.findViewById(R.id.spinner_bancai); etShuliang = view.findViewById(R.id.et_shuliang); rgType = view.findViewById(R.id.rg_type); btnNewDingdan = view.findViewById(R.id.btn_new_dingdan); btnAddChanpin = view.findViewById(R.id.btn_add_chanpin); btnAddZujian = view.findViewById(R.id.btn_add_zujian); } /** * 使用已加载的数据初始化下拉框 */ private void setupSpinnersWithExistingData() { // 1. 设置订单下拉框 setupDingdanSpinner(); // 2. 如果存在选中的订单,设置产品下拉框 if (selectedDingdan != null) { setupChanpinSpinner(selectedDingdan); } // 3. 如果存在选中的产品,设置组件下拉框 if (selectedChanpin != null) { setupZujianSpinner(selectedChanpin); } // 4. 如果存在选中的产品和组件,设置板材下拉框 if (selectedChanpin != null && selectedZujian != null) { setupBancaiSpinner(selectedChanpin, selectedZujian); } } // 修改 setupDingdanSpinner 方法,使用现有数据 private void setupDingdanSpinner() { // 过滤掉预置对象(ID=-1) List<Dingdan> validDingdans = Data.dingdans.stream() .filter(d -> d.getId() != null) .collect(Collectors.toList()); Adapter.setupDingdanSpinner(spinnerDingdan, validDingdans, getContext()); // 设置默认选中项(如果有) if (!validDingdans.isEmpty()) { spinnerDingdan.setSelection(0); selectedDingdan = validDingdans.get(0); } } /** 设置事件监听器 */ private void setupEventListeners() { // 新建订单按钮 btnNewDingdan.setOnClickListener(v -> showNewDingdanDialog()); // 添加产品按钮 btnAddChanpin.setOnClickListener(v -> showAddChanpinDialog()); // 添加组件按钮 btnAddZujian.setOnClickListener(v -> { if (selectedChanpin == null) { Toast.makeText(getContext(), "请先选择产品", Toast.LENGTH_SHORT).show(); return; } showCreateZujianDialog(); }); // 提交按钮 rootView.findViewById(R.id.btn_submit).setOnClickListener(v -> addInventoryRecord()); // 订单下拉框监听 spinnerDingdan.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { selectedDingdan = (Dingdan) parent.getItemAtPosition(position); setupChanpinSpinner(selectedDingdan); } @Override public void onNothingSelected(AdapterView<?> parent) {} }); } /** 设置产品下拉框 */ private void setupChanpinSpinner(Dingdan dingdan) { List<Chanpin> chanpins = new ArrayList<>(); if (dingdan != null && dingdan.getDingdanChanpin() != null) { for (Dingdan_Chanpin dc : dingdan.getDingdanChanpin()) { if (dc != null && dc.getChanpin() != null) { chanpins.add(dc.getChanpin()); } } } Adapter.setupChanpinSpinner(spinnerChanpin, chanpins, getContext()); spinnerChanpin.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { selectedChanpin = (Chanpin) parent.getItemAtPosition(position); if (selectedChanpin != null) { setupZujianSpinner(selectedChanpin); } } @Override public void onNothingSelected(AdapterView<?> parent) {} }); } /** 设置组件下拉框 */ private void setupZujianSpinner(Chanpin chanpin) { List<Zujian> zujians = new ArrayList<>(); for (Chanpin_Zujian cz : chanpin.getChanpinZujian()) { zujians.add(cz.getZujian()); } Adapter.setupZujianSpinner(spinnerZujian, zujians, getContext()); spinnerZujian.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { selectedZujian = (Zujian) parent.getItemAtPosition(position); setupBancaiSpinner(selectedChanpin, selectedZujian); } @Override public void onNothingSelected(AdapterView<?> parent) {} }); } /** 设置板材下拉框 */ private void setupBancaiSpinner(Chanpin chanpin, Zujian zujian) { List<Bancai> bancais = new ArrayList<>(); for (Chanpin_Zujian cz : chanpin.getChanpinZujian()) { if (cz.getZujian().getId().equals(zujian.getId())) { bancais.add(cz.getBancai()); } } Adapter.setupBancaiSpinners(spinnerBancai, bancais, getContext()); spinnerBancai.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { selectedBancai = (Bancai) parent.getItemAtPosition(position); Log.d(TAG, "Selected bancai: " + (selectedBancai != null ? selectedBancai.TableText() : "null")); } @Override public void onNothingSelected(AdapterView<?> parent) { selectedBancai = null; } }); // 设置默认选中项 if (!bancais.isEmpty()) { spinnerBancai.setSelection(0); selectedBancai = bancais.get(0); // 确保默认选中第项 } } /** 添加库存记录 */ private void addInventoryRecord() { // 验证必填项 if (selectedDingdan == null || selectedChanpin == null || selectedZujian == null || selectedBancai == null) { Log.d("addInventoryRecord","selectedDingdan:"+selectedDingdan); Log.d("addInventoryRecord","selectedChanpin:"+selectedChanpin); Log.d("addInventoryRecord","selectedZujian:"+selectedZujian); Log.d("addInventoryRecord","selectedBancai:"+selectedBancai); Toast.makeText(getContext(), "请选择订单、产品、组件和板材", Toast.LENGTH_SHORT).show(); return; } String shuliangStr = etShuliang.getText().toString().trim(); if (shuliangStr.isEmpty()) { Toast.makeText(getContext(), "请输入数量", Toast.LENGTH_SHORT).show(); return; } try { int shuliang = Integer.parseInt(shuliangStr); boolean isJinhuo = rgType.getCheckedRadioButtonId() == R.id.rb_jinhuo; User currentUser = new User(1, "当前用户", "user", "password", 1); createRecord(selectedDingdan, selectedChanpin, selectedZujian, selectedBancai, shuliang, isJinhuo, currentUser); Toast.makeText(getContext(), "记录添加成功", Toast.LENGTH_SHORT).show(); etShuliang.setText(""); } catch (NumberFormatException e) { Toast.makeText(getContext(), "请输入有效的数量", Toast.LENGTH_SHORT).show(); } } /** 创建库存记录 */ private void createRecord(Dingdan dingdan, Chanpin chanpin, Zujian zujian, Bancai bancai, int shuliang, boolean isJinhuo, User user) { if (isJinhuo) { Jinhuo jinhuo = new Jinhuo(); jinhuo.setId(Data.jinhuos.size() + 1); jinhuo.setDingdan(dingdan); jinhuo.setChanpin(chanpin); jinhuo.setZujian(zujian); jinhuo.setBancai(bancai); jinhuo.setShuliang(shuliang); jinhuo.setDate(new Date()); jinhuo.setUser(user); Data.jinhuos.add(jinhuo); } else { shuliang = -shuliang; } updateKucun(bancai, shuliang); } /** 更新库存 */ private void updateKucun(Bancai bancai, int changeAmount) { for (Kucun k : Data.kucuns) { if (k.getBancai().getId().equals(bancai.getId())) { k.setShuliang(k.getShuliang() + changeAmount); return; } } // 创建新库存记录 Kucun newKucun = new Kucun(); newKucun.setId(Data.kucuns.size() + 1); newKucun.setBancai(bancai); newKucun.setShuliang(Math.max(changeAmount, 0)); Data.kucuns.add(newKucun); } /** 显示添加产品对话框 */ private void showAddChanpinDialog() { if (selectedDingdan == null) { Toast.makeText(getContext(), "请先选择订单", Toast.LENGTH_SHORT).show(); return; } AlertDialog.Builder builder = new AlertDialog.Builder(requireContext()); builder.setTitle("添加产品到订单"); View dialogView = LayoutInflater.from(requireContext()).inflate(R.layout.dialog_add_chanpin, null); Spinner spinnerChanpinSelection = dialogView.findViewById(R.id.spinner_chanpin_selection); EditText etQuantity = dialogView.findViewById(R.id.et_chanpin_quantity); Button btnNewChanpin = dialogView.findViewById(R.id.btn_new_chanpin); // 设置产品下拉框 if (Data.chanpins.isEmpty()) { Toast.makeText(getContext(), "没有可用的产品,请先创建产品", Toast.LENGTH_SHORT).show(); return; } Adapter.setupChanpinSpinner(spinnerChanpinSelection, Data.chanpins, getContext()); // 设置新建产品按钮点击事件 btnNewChanpin.setOnClickListener(v -> { showNewChanpinDialog(spinnerChanpinSelection); }); builder.setView(dialogView); builder.setPositiveButton("添加", (dialog, which) -> { Chanpin selected = (Chanpin) spinnerChanpinSelection.getSelectedItem(); String quantityStr = etQuantity.getText().toString().trim(); if (selected == null) { Toast.makeText(getContext(), "请选择产品", Toast.LENGTH_SHORT).show(); return; } if (quantityStr.isEmpty()) { Toast.makeText(getContext(), "请输入数量", Toast.LENGTH_SHORT).show(); return; } try { int quantity = Integer.parseInt(quantityStr); addChanpinToDingdan(selected, quantity); } catch (NumberFormatException e) { Toast.makeText(getContext(), "请输入有效的数量", Toast.LENGTH_SHORT).show(); } }); builder.setNegativeButton("取消", null); builder.show(); } /** 显示新建产品对话框 */ private void showNewChanpinDialog(Spinner spinnerToRefresh) { AlertDialog.Builder builder = new AlertDialog.Builder(requireContext()); builder.setTitle("新建产品"); View dialogView = LayoutInflater.from(requireContext()).inflate(R.layout.dialog_new_chanpin, null); EditText etName = dialogView.findViewById(R.id.et_chanpin_name); builder.setView(dialogView); builder.setPositiveButton("创建", (dialog, which) -> { String bianhao = etName.getText().toString().trim(); if (bianhao.isEmpty()) { Toast.makeText(getContext(), "请输入产品名称", Toast.LENGTH_SHORT).show(); return; } // 检查产品编号是否重复 for (Chanpin c : Data.chanpins) { if (c.getBianhao().equals(bianhao)) { Toast.makeText(getContext(), "产品编号已存在", Toast.LENGTH_SHORT).show(); return; } } createAndSaveChanpin(bianhao, spinnerToRefresh); }); builder.setNegativeButton("取消", null); builder.show(); } /** 创建并保存新产品 */ private void createAndSaveChanpin(String name, Spinner spinnerToRefresh) { Chanpin newChanpin = new Chanpin(); newChanpin.setId(Data.chanpins.size() + 1); newChanpin.setBianhao(name); newChanpin.setChanpinZujian(new ArrayList<>()); // 初始化组件列表 Data.chanpins.add(newChanpin); // 刷新产品下拉框 Adapter.setupChanpinSpinner(spinnerToRefresh, Data.chanpins, getContext()); // 选中新创建的产品 for (int i = 0; i < spinnerToRefresh.getCount(); i++) { Chanpin item = (Chanpin) spinnerToRefresh.getItemAtPosition(i); if (item.getId().equals(newChanpin.getId())) { spinnerToRefresh.setSelection(i); break; } } Toast.makeText(getContext(), "产品创建成功", Toast.LENGTH_SHORT).show(); } /** 添加产品到订单(带数量) */ private void addChanpinToDingdan(Chanpin chanpin, int quantity) { // 检查是否已添加 for (Dingdan_Chanpin dc : selectedDingdan.getDingdanChanpin()) { if (dc.getChanpin().getId().equals(chanpin.getId())) { Toast.makeText(getContext(), "该产品已添加到订单", Toast.LENGTH_SHORT).show(); return; } } // 创建关联对象 Dingdan_Chanpin dc = new Dingdan_Chanpin(); dc.setChanpin(chanpin); dc.setDingdan(selectedDingdan); dc.setShuliang(quantity); // 设置产品数量 selectedDingdan.getDingdanChanpin().add(dc); // 刷新UI setupChanpinSpinner(selectedDingdan); spinnerChanpin.setSelection(selectedDingdan.getDingdanChanpin().size() - 1); Toast.makeText(getContext(), "产品添加成功", Toast.LENGTH_SHORT).show(); } /** 显示新建订单对话框 */ private void showNewDingdanDialog() { AlertDialog.Builder builder = new AlertDialog.Builder(requireContext()); builder.setTitle("新建订单"); View dialogView = LayoutInflater.from(requireContext()).inflate(R.layout.dialog_new_dingdan, null); // 初始化视图 EditText etOrderNumber = dialogView.findViewById(R.id.et_order_number); EditText etOrderDate = dialogView.findViewById(R.id.et_order_date); EditText etdeliveryDate = dialogView.findViewById(R.id.et_delivery_date); Button btnPickOrderDate = dialogView.findViewById(R.id.btn_pick_order_date); Button btnPickdeliveryDate = dialogView.findViewById(R.id.btn_pick_delivery_date); // 设置默认日期 etOrderDate.setText(dateFormat.format(new Date())); etdeliveryDate.setText(dateFormat.format(new Date())); // 日期选择器 btnPickOrderDate.setOnClickListener(v -> showDatePicker(etOrderDate)); btnPickdeliveryDate.setOnClickListener(v -> showDatePicker(etdeliveryDate)); builder.setView(dialogView); builder.setPositiveButton("创建", (dialog, which) -> { String orderNumber = etOrderNumber.getText().toString().trim(); if (orderNumber.isEmpty()) { Toast.makeText(getContext(), "请输入订单号", Toast.LENGTH_SHORT).show(); return; } // 检查订单号是否重复 for (Dingdan d : Data.dingdans) { if (d.getNumber().equals(orderNumber)) { Toast.makeText(getContext(), "订单号已存在", Toast.LENGTH_SHORT).show(); return; } } try { Date orderDate = dateFormat.parse(etOrderDate.getText().toString()); Date deliveryDate = dateFormat.parse(etdeliveryDate.getText().toString()); createAndSaveDingdan(orderNumber, orderDate, deliveryDate); } catch (ParseException e) { Toast.makeText(getContext(), "日期格式错误", Toast.LENGTH_SHORT).show(); } }); builder.setNegativeButton("取消", null); builder.show(); } /** 创建并保存订单 */ private void createAndSaveDingdan(String orderNumber, Date orderDate, Date deliveryDate) { Dingdan newDingdan = new Dingdan(); newDingdan.setId(Data.dingdans.size() + 1); newDingdan.setNumber(orderNumber); newDingdan.setXiadan(orderDate); newDingdan.setJiaohuo(deliveryDate); newDingdan.setDingdanChanpin(new ArrayList<>()); Data.dingdans.add(newDingdan); // 刷新UI setupDingdanSpinner(); spinnerDingdan.setSelection(Data.dingdans.size() - 1); Toast.makeText(getContext(), "新建订单成功", Toast.LENGTH_SHORT).show(); } /** 显示日期选择器 */ private void showDatePicker(EditText targetField) { Calendar cal = Calendar.getInstance(); new DatePickerDialog(requireContext(), (view, year, month, dayOfMonth) -> { Calendar selected = Calendar.getInstance(); selected.set(year, month, dayOfMonth); targetField.setText(dateFormat.format(selected.getTime())); }, cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH) ).show(); } /** 显示创建组件对话框 */ private void showCreateZujianDialog() { AlertDialog.Builder builder = new AlertDialog.Builder(requireContext()); builder.setTitle("添加新组件"); View dialogView = LayoutInflater.from(requireContext()).inflate(R.layout.dialog_create_zujian_bancai, null); // 初始化视图 Spinner etZujianName = dialogView.findViewById(R.id.et_zujian_name); Spinner spinnerbancai = dialogView.findViewById(R.id.spinner_bancai); SearchView searchBancai = dialogView.findViewById(R.id.search_bancai); EditText numberOne_howmany=dialogView.findViewById(R.id.number_one_howmany); // 设置适配器 Adapter.setupZujianSpinner(etZujianName, Data.zujians, getContext()); Adapter.setupBancaiSpinners(spinnerbancai, Data.bancais, getContext()); // 设置搜索功能 searchBancai.setOnQueryTextListener(new SearchView.OnQueryTextListener() { @Override public boolean onQueryTextSubmit(String query) { return false; } @Override public boolean onQueryTextChange(String newText) { List<Bancai> filtered = new ArrayList<>(); for (Bancai b : Data.bancais) { if (b.TableText().toLowerCase().contains(newText.toLowerCase())) { filtered.add(b); } } Adapter.setupBancaiSpinners(spinnerbancai, filtered, getContext()); return true; } }); builder.setView(dialogView); builder.setPositiveButton("创建", (dialog, which) -> { Zujian zujian = (Zujian) etZujianName.getSelectedItem(); Bancai bancai = (Bancai) spinnerbancai.getSelectedItem(); String One_howmany= numberOne_howmany.getText().toString(); if (zujian == null || bancai == null) { Toast.makeText(getContext(), "请选择组件和板材", Toast.LENGTH_SHORT).show(); return; } if (One_howmany==null){ Toast.makeText(getContext(), "请选择板材生产多少组件", Toast.LENGTH_SHORT).show(); return; } // 检查是否已存在相同的组合 boolean isDuplicate = false; for (Chanpin_Zujian existing : selectedChanpin.getChanpinZujian()) { if (existing.getZujian().equals(zujian) && existing.getBancai().equals(bancai)) { isDuplicate = true; break; } } if (isDuplicate) { Toast.makeText(getContext(), "该产品和组件组合已存在,不能重复添加", Toast.LENGTH_SHORT).show(); return; } // 创建关联对象 Chanpin_Zujian cz = new Chanpin_Zujian(); cz.setZujian(zujian); cz.setBancai(bancai); cz.setChanpin(selectedChanpin); cz.setOne_howmany(Double.valueOf(One_howmany));//double类型 selectedChanpin.getChanpinZujian().add(cz); Dingdan_chanpin_zujian dz=new Dingdan_chanpin_zujian(); dz.setBancai(selectedBancai); dz.setZujian(cz); Data.Dingdan_chanpin_zujians.add(dz); // 刷新UI setupZujianSpinner(selectedChanpin); spinnerZujian.setSelection(selectedChanpin.getChanpinZujian().size() - 1); Toast.makeText(getContext(), "组件添加成功", Toast.LENGTH_SHORT).show(); }); builder.setNegativeButton("取消", null); builder.show(); } }实现板材新建弹窗,弹窗中材质新建只用输入材质name ,
最新发布
06-15
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值