Android Studio中Java代码填充Spinner的优化方法咨询
优化Spinner动态添加条目的实现方式
你的判断完全正确——每次点击按钮都重复创建ArrayAdapter并绑定到Spinner确实冗余,我们可以只初始化一次适配器,后续仅更新数据并通知适配器刷新即可,这样效率更高。
优化后的代码实现
public class MainActivity extends AppCompatActivity { // 把控件和适配器提升为成员变量,避免重复查找和创建 private List<String> lista = new ArrayList<>(); private EditText txtArticulo; private Spinner spinLista; private ArrayAdapter<String> adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 仅在初始化时查找一次控件 txtArticulo = findViewById(R.id.txtArticulo); spinLista = findViewById(R.id.spinLista); // 初始化适配器并绑定到Spinner,只做一次 adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, lista); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinLista.setAdapter(adapter); } public void btnAgregar_Click(View v) { String articulo = txtArticulo.getText().toString(); if (!articulo.trim().isEmpty()) { lista.add(articulo); txtArticulo.setText(""); // 仅通知适配器数据已更新,触发Spinner刷新 adapter.notifyDataSetChanged(); } else { Toast.makeText(this,"Error: escribe un artículo",Toast.LENGTH_SHORT).show(); } } }
关键优化点说明
- 减少重复操作:将
EditText、Spinner和ArrayAdapter改为成员变量,避免每次点击按钮都调用findViewById和创建新适配器,节省系统资源。 - 高效刷新机制:当列表数据变化时,只需调用
adapter.notifyDataSetChanged(),适配器会自动通知Spinner更新视图,无需重新绑定适配器。 - 代码职责更清晰:初始化逻辑集中在
onCreate方法中,点击事件仅处理数据添加和刷新操作,代码结构更简洁易维护。
内容的提问来源于stack exchange,提问作者Tony Valderrama
相关产品推荐
相关产品推荐

