Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
11
respostas

Dúvida na hora de levar informações pra outra activity

Eu tenho uma tela onde faço o cadastro de perguntas, mas após esse cadastro, eu gostaria de fazer com que outra activity recebesse essas perguntas e me desse a opção para a resposta.

Eu fiz apenas um modelo no xml, onde só contém uma pergunta, no caso eu queria fazer isso gerar várias perguntas e carregar as perguntas de acordo com o formulario onde ela foi cadastrada.

Por exemplo:

Tenho um formulário chamado ALTURA, faço cadastro de perguntas nesse formulario ALTURA, depois quero chamar uma outra activity onde carregará todas essas perguntas cadastradas e colocar a opção de respondê-las.

Esse seria o xml modelo. Agora quero colocar as perguntas cadastradas para aparecer e salvar junto com as respostas.

            <TextView
                android:id="@+id/nomeInsp"
                android:layout_width="match_parent"
                android:layout_height="35dp"
                android:background="#2da94a"
                android:text="Nome da Inspeção"
                android:gravity="center"
                android:textColor="#fff"
                android:textSize="22sp"
                android:textStyle="bold"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="parent"
                app:layout_constraintVertical_bias="0.00" />

            <TextView
                android:id="@+id/pergunta"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_margin="8dp"
                android:text="Inserir pergunta"
                android:textColor="@android:color/black"
                android:textSize="18sp"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/nomeInsp"
                app:layout_constraintVertical_bias="0.04000002" />


            <RadioGroup
                android:id="@+id/radioGroup"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_margin="8dp"
                android:orientation="horizontal"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintHorizontal_bias="0.28"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/pergunta"
                app:layout_constraintVertical_bias="0.00999999">

                <RadioButton
                    android:id="@+id/conforme"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:text="Conforme" />

                <RadioButton
                    android:id="@+id/nConforme"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:text="Não conforme" />

                <RadioButton
                    android:id="@+id/nSeAplica"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:text="N/A" />
            </RadioGroup>
11 respostas

Oi Rafaela, tudo bem ?

Acho que pode ter uma lista de perguntas, quando o usuário clicar na lista você vai para a outra activity passando a pergunta, ai é só popular o textview com o conteúdo da pergunta e ai o usuário responde conforme o desejado.

Basta passar na própria intent.

Mas eu faria uma tela listando as perguntas e depois iria passando pra outra tela quando a pessoa clicar? Não teria uma forma menos trabalhosa pro usuario, no caso. Dele só clicar no formulario desejado e eu já conseguir trazer uma tela com todas perguntas cadastradas com a opção de resposta?

Tem diversas maneiras.

Outra coisa que pode fazer é iterar as provas, para cada resposta, voce passa para a próxima, com um contador mesmo

E como eu poderia fazer isso?

FormularioActivity {

private List<Duvida> duvidas; // busca isso do banco ou do ws


private int indiceDuvidaAtual = 0;


public void responde(){

    indiceDuvidaAtual ++;

    atualizaFormularioComDuvidaAtual();

}



public void atualizaFormularioComDuvidaAtual(){

    Duvida atual = duvidas.get(indiceDuvidaAtual);

    // coloca essa duvida na tela

}


}

Algo similar a isso

Entendi, porém não entendi como vou usar esse metodo depois... Eu tenho o botão, quando eu clicar no botão, ele teria que atualizar a tela com outra pergunta...

package br.com.hlnengenharia.app;

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.View;
import android.widget.Button;
import android.widget.TextView;

import java.util.List;

import br.com.hlnengenharia.app.model.Inspecao;
import br.com.hlnengenharia.app.model.Pergunta;

public class InspecaoActivity extends AppCompatActivity {

    private TextView nomeInsp, campoPergunta;
    private List<Pergunta> perguntas;
    private int indicePerguntaAtual = 0;
    private Button proximaPergunta;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_inspecao);

        setTitle("");

        carregaNomeInspecao();
        responde();

        proximaPergunta = findViewById(R.id.proximaPergunta);
        proximaPergunta.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
            }
        });
    }

    public void responde(){
        indicePerguntaAtual++;
        atualizaformulario();
    }

    private void atualizaformulario() {
        Pergunta atual = perguntas.get(indicePerguntaAtual);
    }

    private void carregaNomeInspecao() {
        Intent intent = getIntent();
        Inspecao inspecao = (Inspecao) intent.getSerializableExtra("nome");
        nomeInsp = findViewById(R.id.nomeInsp);
        nomeInsp.setText(inspecao.getNome());
    }


}

então?

Você precisa ter as dúvidas, que não faço ideia de onde vão vir, rs.

Mas quando as tiver consegue popular o campos da tela e ao clicar no botão próxima pergunta basta passar para o próximo indice

Mas a minha dúvida é: pra eu puxar essas perguntas eu devo fazer um Adapter? Ou o que? Porque quando eu tenho uma listview eu crio um arrayadapter pra conseguir carregar essa "lista" e agora não é um listview, eu vou popular um textview numa mesma activity varias vezes... então como eu vou popular minha "lista" no caso?

as perguntas vem daqui

public class CadPerguntaActivity extends AppCompatActivity {

    Button salvar;
    EditText pergunta;
    TextView codigo, setor, nome;
    private PerguntaHelper helper;
    private Inspecao inspecao;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_cad_pergunta);

        helper = new PerguntaHelper(CadPerguntaActivity.this);

        Intent intent = getIntent();
        inspecao = (Inspecao) intent.getSerializableExtra("inspecao");
        codigo = findViewById(R.id.codigo_insp);
        setor = findViewById(R.id.setor_insp);
        nome = findViewById(R.id.nome_insp);
        codigo.setText(inspecao.getId().toString());
        setor.setText(inspecao.getIdSetor().toString());
        nome.setText(inspecao.getNome());


        salvar = findViewById(R.id.salvar_pergunta);
        salvar.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                PerguntaDAO dao = new PerguntaDAO(CadPerguntaActivity.this);

                Pergunta pergunta = helper.pegaPergunta();

                dao.insereAltura(pergunta);



                Toast.makeText(CadPerguntaActivity.this, "Salvo com sucesso", Toast.LENGTH_SHORT).show();
                finish();
            }
        });

    }
}

Voce vai precisar da lista de perguntas na outra activity, pega do dao.

Você tem o campo de pergunta né ? Basta você pegar a sua pergunta, que virá da lista e setar esse campo.

Meu model da classe de Perguntas esta assim... então vou no PerguntaDAO e crio um "buscaPerguntas"? É isto?

public class Pergunta implements Serializable {
    private Long id;
    private Long idInspecao;
    private String pergunta;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Long getIdInspecao() {
        return idInspecao;
    }

    public void setIdInspecao(Long idInspecao) {
        this.idInspecao = idInspecao;
    }

    public String getPergunta() {
        return pergunta;
    }

    public void setPergunta(String pergunta) {
        this.pergunta = pergunta;
    }
}
  public List<Pergunta> buscaPerguntaAltura(Long idInsp){
        List<Pergunta> perguntas = new ArrayList<>();

        Cursor c = dao.getReadableDatabase().rawQuery("SELECT * FROM Altura JOIN Inspecoes ON idInspecao=inspencao_id WHERE idInspecao=?", new String[]{idInsp.toString()});

        while (c.moveToNext())
            perguntas.add(criaPergunta(c));
        c.close();
        return perguntas;
    }
solução!

Sim sim, exatamente :D