package com.example.kucun2.function;
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Filter;
import android.widget.Filterable;
import android.widget.Spinner;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.example.kucun2.entity.Bancai;
import com.example.kucun2.entity.Caizhi;
import com.example.kucun2.entity.Chanpin;
import com.example.kucun2.entity.Dingdan;
import com.example.kucun2.entity.Mupi;
import com.example.kucun2.entity.Zujian;
import java.util.ArrayList;
import java.util.List;
public class Adapter {
// 安全适配器基类,处理公共逻辑
// 安全适配器基类,处理公共逻辑
private static abstract class SafeSpinnerAdapter<T> extends ArrayAdapter<T> {
private static final String TAG = "SafeSpinnerAdapter";
private final LayoutInflater inflater;
private final String defaultText;
public SafeSpinnerAdapter(Context context, int resource, List<T> objects, String defaultText) {
super(context, resource, objects);
this.inflater = LayoutInflater.from(context);
this.defaultText = defaultText != null ? defaultText : "请选择";
}
@Override
public int getCount() {
return super.getCount() + 1; // 增加一个默认项
}
@Override
public T getItem(int position) {
return position == 0 ? null : super.getItem(position - 1);
}
@Override
public View getDropDownView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
if (parent == null) {
Log.w(TAG, "Parent is null in getDropDownView");
return new TextView(getContext());
}
if (convertView == null) {
convertView = inflater.inflate(android.R.layout.simple_spinner_dropdown_item, parent, false);
}
TextView textView = convertView.findViewById(android.R.id.text1);
if (position == 0) {
textView.setText(defaultText);
} else {
T item = getItem(position);
textView.setText(item != null ? formatDropdownText(item) : "");
}
return convertView;
}
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
if (parent == null) {
Log.w(TAG, "Parent is null in getView");
return new TextView(getContext());
}
if (convertView == null) {
convertView = inflater.inflate(android.R.layout.simple_spinner_item, parent, false);
}
TextView textView = convertView.findViewById(android.R.id.text1);
if (position == 0) {
textView.setText(defaultText);
} else {
T item = getItem(position);
textView.setText(item != null ? formatDisplayText(item) : "");
}
return convertView;
}
protected abstract String formatDisplayText(T item);
protected abstract String formatDropdownText(T item);
}
// 1. 材质适配器
public static ArrayAdapter<Caizhi> setupCaizhiSpinner(Spinner spinner, List<Caizhi> data, Context context) {
ArrayAdapter<Caizhi> adapter = new SafeSpinnerAdapter<Caizhi>(
context,
android.R.layout.simple_spinner_item,
data,
"请选择材质"
) {
@Override
protected String formatDisplayText(Caizhi item) {
return item != null ? item.getName() : "";
}
@Override
protected String formatDropdownText(Caizhi item) {
return item != null ? item.getName() : "";
}
};
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
spinner.setSelection(0); // 默认选中"请选择"
return adapter;
}
// 2. 木皮适配器
public static void setupMupiSpinner(Spinner spinner, List<Mupi> data, Context context) {
ArrayAdapter<Mupi> adapter = new SafeSpinnerAdapter<Mupi>(
context,
android.R.layout.simple_spinner_item,
data,
"请选择木皮"
) {
@Override
protected String formatDisplayText(Mupi item) {
return item != null ? item.formatMupiDisplay() : "";
}
@Override
protected String formatDropdownText(Mupi item) {
return item != null ? item.formatMupiDisplay() : "";
}
};
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
spinner.setSelection(0); // 默认选中"请选择"
}
// 3. 板材适配器
public static void setupBancaiSpinners(Spinner spinner, List<Bancai> data, Context context) {
ArrayAdapter<Bancai> adapter = new SafeSpinnerAdapter<Bancai>(
context,
android.R.layout.simple_spinner_item,
data,
"请选择板材"
) {
@Override
protected String formatDisplayText(Bancai item) {
return item != null ? item.TableText() : "";
}
@Override
protected String formatDropdownText(Bancai item) {
return item != null ? item.TableText() : "";
}
};
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
spinner.setSelection(0); // 默认选中"请选择"
}
// 4. 订单适配器
public static void setupDingdanSpinner(Spinner spinner, List<Dingdan> data, Context context) {
ArrayAdapter<Dingdan> adapter = new SafeSpinnerAdapter<Dingdan>(
context,
android.R.layout.simple_spinner_item,
data,
"请选择订单"
) {
@Override
protected String formatDisplayText(Dingdan item) {
return item != null ? item.getNumber() : "";
}
@Override
protected String formatDropdownText(Dingdan item) {
return item != null ? item.getNumber() : "";
}
};
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
spinner.setSelection(0); // 默认选中"请选择"
}
// 5. 产品适配器
public static void setupChanpinSpinner(Spinner spinner, List<Chanpin> data, Context context) {
ArrayAdapter<Chanpin> adapter = new SafeSpinnerAdapter<Chanpin>(
context,
android.R.layout.simple_spinner_item,
data,
"请选择产品"
) {
@Override
protected String formatDisplayText(Chanpin item) {
return item != null ? item.getBianhao() : "";
}
@Override
protected String formatDropdownText(Chanpin item) {
return item != null ? item.getBianhao() : "";
}
};
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
spinner.setSelection(0); // 默认选中"请选择"
}
// 6. 组件适配器
public static void setupZujianSpinner(Spinner spinner, List<Zujian> data, Context context) {
ArrayAdapter<Zujian> adapter = new SafeSpinnerAdapter<Zujian>(
context,
android.R.layout.simple_spinner_item,
data,
"请选择组件"
) {
@Override
protected String formatDisplayText(Zujian item) {
return item != null ? item.getName() : "";
}
@Override
protected String formatDropdownText(Zujian item) {
return item != null ? item.getName() : "";
}
};
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
spinner.setSelection(0); // 默认选中"请选择"
}
// 1. 新增支持筛选的适配器基类
/**
* 新增支持筛选的适配器基类
* @param <T>
*/
public static abstract class FilterableAdapter<T> extends ArrayAdapter<T> implements Filterable {
private static final String TAG = "FilterableAdapter";
private final LayoutInflater inflater;
private List<T> originalList;
private List<T> filteredList;
private final String defaultText;
private final ItemFilter filter = new ItemFilter();
public FilterableAdapter(Context context, int resource, List<T> objects, String defaultText) {
super(context, resource, objects);
this.inflater = LayoutInflater.from(context);
this.originalList = new ArrayList<>(objects);
this.filteredList = new ArrayList<>(objects);
this.defaultText = defaultText != null ? defaultText : "请选择";
}
public FilterableAdapter(Context context, int resource, List<T> objects) {
super(context, resource, objects);
this.inflater = LayoutInflater.from(context);
this.originalList = new ArrayList<>(objects);
this.filteredList = new ArrayList<>(objects);
this.defaultText = "请选择";
}
@Override
public int getCount() {
return filteredList.size() + 1; // 增加默认项
}
@Override
public T getItem(int position) {
return position == 0 ? null : filteredList.get(position - 1); // 位置偏移处理
}
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
if (convertView == null) {
convertView = inflater.inflate(android.R.layout.simple_spinner_item, parent, false);
}
TextView textView = convertView.findViewById(android.R.id.text1);
if (position == 0) {
textView.setText(defaultText); // 默认提示文本
} else {
T item = getItem(position);
textView.setText(item != null ? formatDisplayText(item) : "");
}
return convertView;
}
@Override
public View getDropDownView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
if (convertView == null) {
convertView = inflater.inflate(android.R.layout.simple_spinner_dropdown_item, parent, false);
}
TextView textView = convertView.findViewById(android.R.id.text1);
if (position == 0) {
textView.setText(defaultText); // 下拉框中的默认提示
} else {
T item = getItem(position);
textView.setText(item != null ? formatDropdownText(item) : "");
}
return convertView;
}
public void updateList(List<T> newList) {
this.originalList = new ArrayList<>(newList);
this.filteredList = new ArrayList<>(newList);
notifyDataSetChanged();
}
@Override
public Filter getFilter() {
return filter;
}
// 必须实现的抽象方法
protected abstract String formatDisplayText(T item);
protected abstract String formatDropdownText(T item);
private class ItemFilter extends Filter {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults results = new FilterResults();
List<T> filtered = new ArrayList<>();
if (constraint == null || constraint.length() == 0) {
// 无筛选条件时包含所有项
filtered.addAll(originalList);
} else {
String filterPattern = constraint.toString().toLowerCase().trim();
for (T item : originalList) {
if (formatDisplayText(item).toLowerCase().contains(filterPattern)) {
filtered.add(item);
}
}
}
results.values = filtered;
results.count = filtered.size();
return results;
}
@Override
@SuppressWarnings("unchecked")
protected void publishResults(CharSequence constraint, FilterResults results) {
filteredList = (List<T>) results.values;
if (results.count > 0 || constraint == null || constraint.length() == 0) {
notifyDataSetChanged();
} else {
notifyDataSetInvalidated();
}
}
}
}
//
/**
* 为订单创建筛选适配器
* @param context
* @param data
* @return
*/
public static FilterableAdapter<Dingdan> createDingdanFilterableAdapter(
Context context, List<Dingdan> data) {
return new FilterableAdapter<Dingdan>(context, android.R.layout.simple_spinner_item, data) {
@Override
protected String formatDisplayText(Dingdan item) {
return item != null ? item.getNumber() : "";
}
@Override
protected String formatDropdownText(Dingdan item) {
return item != null ? item.getNumber() : "";
}
};
}
// 为产品创建筛选适配器
public static FilterableAdapter<Chanpin> createChanpinFilterableAdapter(
Context context, List<Chanpin> data) {
return new FilterableAdapter<Chanpin>(context, android.R.layout.simple_spinner_item, data) {
@Override
protected String formatDisplayText(Chanpin item) {
return item != null ? item.getBianhao() : "";
}
@Override
protected String formatDropdownText(Chanpin item) {
return item != null ? item.getBianhao() : "";
}
};
}
// 为组件创建筛选适配器
public static FilterableAdapter<Zujian> createZujianFilterableAdapter(
Context context, List<Zujian> data) {
return new FilterableAdapter<Zujian>(context, android.R.layout.simple_spinner_item, data) {
@Override
protected String formatDisplayText(Zujian item) {
return item != null ? item.getName() : "";
}
@Override
protected String formatDropdownText(Zujian item) {
return item != null ? item.getName() : "";
}
};
}
// 为板材创建筛选适配器
public static FilterableAdapter<Bancai> createBancaiFilterableAdapter(
Context context, List<Bancai> data) {
return new FilterableAdapter<Bancai>(context, android.R.layout.simple_spinner_item, data) {
@Override
protected String formatDisplayText(Bancai item) {
return item != null ? item.TableText() : "";
}
@Override
protected String formatDropdownText(Bancai item) {
return item != null ? item.TableText() : "";
}
};
}
}
在FilterableAdapter中直接输出标准格式文字
最新发布