我是Android的新手,我正在尝试构建一个简单的应用,将微调器上选择的值传递给数据库。但我无法弄清楚如何将此值传递给变量。我已经阅读了与该主题相关的所有主题,但我无法找到答案。这是我的代码:
package com.example.marcelo.aulaandroid;
import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Toast;
import com.example.marcelo.aulaandroid.Data.ClienteDataSource;
import com.example.marcelo.aulaandroid.Modelo.Cliente;
public class CadastroClientesActivity extends AppCompatActivity {
boolean estadoCadastro = true;
ClienteDataSource ds;
private Cliente cliente = new Cliente();
private String spnGenero;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_cadastro_clientes);
final Spinner spinner = (Spinner) findViewById(R.id.spinGenero);
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,R.array.genero_array, android.R.layout.simple_list_item_1);
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
String item = parent.getItemAtPosition(position).toString();
//Toast.makeText(parent.getContext(), "Selected..." + item, Toast.LENGTH_LONG).show();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
this.startDataBase();
spnGenero = (String) findViewById(R.id.spinGenero);
Intent intent = getIntent();
if(intent != null){
if(intent.getSerializableExtra("objCliente") != null){
estadoCadastro = false;
cliente = (Cliente)intent.getSerializableExtra("objCliente");
spnGenero.setText(cliente.getGenero());
}
}
}
public void salvarCliente(View view){
cliente.setGenero(spnGenero.getText().toString());
if(estadoCadastro){
ds.inserir(cliente);
}
else{
ds.atualizar(cliente);
}
finish();
}
private void startDataBase(){
ds = new ClienteDataSource(this);
ds.open();
}
}
当我调试这段代码时,我可以看到toast返回变量&#34; item&#34;的值。正确的,但我需要将它分配给&#34; spnGenero&#34;然后,在此类之外的类bean上的另一个变量。我怎么能这样做?
答案 0 :(得分:0)
我在这里找到一个话题,说我可以回答我自己的问题。我终于找到了问题的解决方案,感谢主题how to use spinner的第三个答案,用户DCruz22提供的想法以及一些想象力。
首先,我正在修改变量spnGenero的声明。而不是private Spinner spnGenero;
我正在使用private String spnGenero;
现在,在onItemSelected事件中,我将spinner值(一个字符串)赋给spnGenero变量:
spnGenero = parent.getItemAtPosition(position).toString();
致电this.startDataBase();
后,我发现我不需要说明:spnGenero = (Spinner) findViewById(R.id.spinGenero);
同样适用于代码:spin_val.setText(cliente.getGenero());
最重要的修改是在salvarCliente()
回调中。它需要获取spnGenero的值(现在正式为String)并将其传递给我的bean。我把它改成了:
cliente.setGenero(spnGenero);
当然,setGenero是在我的bean中声明的方法。
我希望这个答案可以帮助那些面临类似问题的人。