我正在尝试在 Fragment 中创建可靠的微调器。 有 2 个微调器,微调器 7 中的值取决于微调器 3 中的值
public class PageFragment1 extends Fragment implements AdapterView.OnItemSelectedListener {
@Nullable
@Override
public View onCreateView(LayoutInflater inflater,
@Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
ViewGroup rootView = (ViewGroup) inflater
.inflate(R.layout.page_1, container
, false);
Spinner spinner3 = (Spinner) rootView.findViewById(R.id.spinnerAxles);
ArrayAdapter<CharSequence> adapter3 = ArrayAdapter.createFromResource(getActivity(), R.array.Axles, android.R.layout.simple_spinner_item);
adapter3.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner3.setAdapter(adapter3);
spinner3.setOnItemSelectedListener(this);
Spinner spinner7 = (Spinner) rootView.findViewById(R.id.spinnerTrailAxle);
ArrayAdapter<CharSequence> adapter7 = ArrayAdapter.createFromResource(getActivity(), R.array.TrailAxle, android.R.layout.simple_spinner_item);
adapter7.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner7.setAdapter(adapter7);
spinner7.setOnItemSelectedListener(this);
return rootView;
}
@Override
public void onItemSelected (AdapterView<?> parent, View view, int position, long id) {
Spinner spinner3 = (Spinner) getActivity().findViewById(R.id.spinnerAxles);
ArrayAdapter<CharSequence> adapter3 = ArrayAdapter.createFromResource(getActivity(), R.array.Axles, android.R.layout.simple_spinner_item);
adapter3.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner3.setAdapter(adapter3);
spinner3.setOnItemSelectedListener(this);
Spinner spinner7 = (Spinner) getActivity().findViewById(R.id.spinnerTrailAxle);
ArrayAdapter<CharSequence> adapter7 = ArrayAdapter.createFromResource(getActivity(), R.array.TrailAxle1, android.R.layout.simple_spinner_item);
adapter7.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner7.setAdapter(adapter7);
spinner7.setOnItemSelectedListener(this);
String AxlesText = spinner3.getSelectedItem().toString();
if (AxlesText.equals("6x2")) {
Spinner spinner7 = (Spinner) getActivity().findViewById(R.id.spinnerTrailAxle);
ArrayAdapter<CharSequence> adapter7 = ArrayAdapter.createFromResource(getActivity(), R.array.TrailAxle1, android.R.layout.simple_spinner_item);
adapter7.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner7.setAdapter(adapter7);
spinner7.setOnItemSelectedListener(this);
} else {
Spinner spinner7 = (Spinner) getActivity().findViewById(R.id.spinnerTrailAxle);
ArrayAdapter<CharSequence> adapter71 = ArrayAdapter.createFromResource(getActivity(), R.array.TrailAxle1, android.R.layout.simple_spinner_item);
adapter71.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner7.setAdapter(adapter71);
spinner7.setOnItemSelectedListener(this);
}
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
}
程序根据spinner3中的值替换了spinner7中的下拉列表,但是我不能从这个下拉列表中选择项目。 无论我选择什么,spinner7 总是显示下拉列表中的第一项。
在解决您的问题时要记住两点:
notifyDataSetChanged()
每当适配器中的数据
变化此外,您不需要在每次选择时都重新初始化整个适配器。相反,您可以像这样简化代码:
public class PageFragment1 extends Fragment implements AdapterView.OnItemSelectedListener {
private ArrayAdapter<CharSequence> adapter3, adapter7;
private List<CharSequence> spinner7DataList; // Save a reference to your data here
@Nullable
@Override
public View onCreateView(LayoutInflater inflater,
@Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
ViewGroup rootView = (ViewGroup) inflater
.inflate(R.layout.page_1, container
, false);
Spinner spinner3 = (Spinner) rootView.findViewById(R.id.spinnerAxles);
adapter3 = ArrayAdapter.createFromResource(getActivity(), R.array.Axles, android.R.layout.simple_spinner_item);
adapter3.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner3.setAdapter(adapter3);
spinner3.setOnItemSelectedListener(this);
spinner7DataList = new ArrayList<>(); // Initialize your data
spinner7DataList.addAll(Arrays.asList(getContext().getResources().getStringArray(R.array.TrailAxle)));
Spinner spinner7 = (Spinner) rootView.findViewById(R.id.spinnerTrailAxle);
adapter7 = new ArrayAdapter<>(getContext(), android.R.layout.simple_spinner_item, spinner7DataList);
adapter7.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner7.setAdapter(adapter7);
spinner7.setOnItemSelectedListener(this);
return rootView;
}
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int position, long id) {
// Verify that the adapter that triggered this method is the one you want
if (adapterView!= null && adapterView.getId() == R.id.spinnerAxles) {
String axlesText = adapter3.getItem(position).toString();
if (axlesText.equals("6x4")) {
// Note that we are not updating the adapter here, just the list that was passed to it previously
spinner7DataList.clear();
spinner7DataList.addAll(Arrays.asList(getContext().getResources().getStringArray(R.array.TrailAxle2))); // Load the new data into the list
adapter7.notifyDataSetChanged(); // Important, this will ensure that your data changes are reflected on the Spinner
} else if (axlesText.equals("3x2")) { // Any other conditions if needed
}
}
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
这个答案有效,因为您通过引用
spinner7DataList
来传递adapter7
。因此,每当您在 spinner7DataList
中操作数据时,它都会反映在 adapter7
中