如何将微调器值传递给Android

时间:2016-04-21 18:01:44

标签: android android-spinner

我是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上的另一个变量。我怎么能这样做?

1 个答案:

答案 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中声明的方法。

我希望这个答案可以帮助那些面临类似问题的人。