Tecnologia do Blogger.
RSS

[androidbrasil-dev] Enviar e recuperar informação de fragments

Boa tarde a todos estou começando a utilizar o fragment no Android.

Tenho um Activity que possui 2 fragments.

Quando eu clicar no menu salvar eu teria que pegar o conteúdo dos dois fragment(O preenchimento dos dois não é obrigatório) e salvar no meu arquivo SharedPreferences.
Para salvar os dados eu criei uma interface nos dois fragments e passo o objeto preenchido para a Activity no método onPause do Fragment. O problema é que o fragment so entra no onPause no momento da destruição da Activity onde nesse momento já não tenho mais o objeto na Activity para realizar o método de salvar então o primeiro Fragment so consegue enviar a informação para a Activity se eu passar para o Fragment 2, o que não é o processo correto.

Em contrapartida não estou sabendo o momento de recuperar os dados do objeto na Activity para recuperar no Fragment via interface.

Como eu recupero o objeto via interface e como salvar dos dados sem precisar entrar no outro Fragment?

Activity : 
public class Config extends Activity implements onconfigconexao {

private Configuracoes confi;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setContentView(R.layout.config);

lerconfig();
ativarTabs();

}

private void ativarTabs() {

ConfigConexao fragConexao = new ConfigConexao();
Bundle b = new Bundle();
b.putSerializable("configuracoes", confi);
fragConexao.setArguments(b);
ConfigComunicacao fragComunicacao = new ConfigComunicacao();

/* Adiciona os fragments */
FragmentManager fm = getFragmentManager();
FragmentTransaction t = fm.beginTransaction();
t.add(R.id.lay_config, fragConexao, "fragComunicacao");
t.add(R.id.lay_config, fragComunicacao, "fragComunicacao");
t.commit();

/* Ativa a navegacao por tabs */

ActionBar bar = getActionBar();
bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
;
/* Ativa o icone da home */
bar.setDisplayHomeAsUpEnabled(true);

/* Cria as tabls */
Tab conexao = bar.newTab();
conexao.setText("Conexão");
conexao.setTabListener(new NavegacaoTabListener(R.id.lay_config,fragConexao));
bar.addTab(conexao);

Tab comunicacao = bar.newTab();
comunicacao.setText("Comunicação");
comunicacao.setTabListener(new NavegacaoTabListener(R.id.lay_config,fragComunicacao));
bar.addTab(comunicacao);

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuItem salvar = menu.add(0, 0, 0, "Salvar");
salvar.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
// salvar.setIcon(R.drawable.ic_sucesso);

MenuItem cancelar = menu.add(0, 1, 1, "Cancelar");
cancelar.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
// cancelar.setIcon(R.drawable.ic_error_envio);

return true;
}

@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {

switch (item.getItemId()) {

case 0:

if (confi != null) {
salvarconfig(confi);
AlertDialog.Builder aler = new AlertDialog.Builder(Config.this);
aler.setTitle("Informação");
aler.setMessage("Configurações Salvar com sucesso!");
aler.setNegativeButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
finish();
}
});
AlertDialog bulder = aler.create();
bulder.show();
}
break;

case 1:
AlertDialog.Builder alerta = new AlertDialog.Builder(this);
alerta.setTitle("Atenção!");
alerta.setMessage("As configurações ainda não foram salvas. \n Deseja continuar?");
alerta.setPositiveButton("Sim",
new DialogInterface.OnClickListener() {

@Override
public void onClick(DialogInterface dialog, int which) {

dialog.dismiss();
finish();

}
});
alerta.setNegativeButton("Não",
new DialogInterface.OnClickListener() {

@Override
public void onClick(DialogInterface dialog, int which) {

dialog.dismiss();

}
});
AlertDialog alert = alerta.create();
alert.show();

break;

}

return true;
}

public void salvarconfig(Configuracoes c) {

SharedPreferences sp = getSharedPreferences(
Salva_Preferences.PREFERENCES_NAME, MODE_PRIVATE);
SharedPreferences.Editor edt = sp.edit();

/* Conexão */

edt.putString("host", c.getHost());
Log.d("Config - Salvarconfig","Valor do host informado " + String.valueOf(c.getHost()));
edt.putInt("port", c.getPortaHost());
Log.d("Config - Salvarconfig","Porta informada " + String.valueOf(c.getPortaHost()));
       
edt.putInt("connect", c.getConexao());
Log.d("Config - Salvarconfig","Tipo de conexao informada " + String.valueOf(c.getConexao()));

/* Confirma a gravaçao */

edt.commit();
}

public void lerconfig() {

confi = new Configuracoes();
if (confi != null) {

SharedPreferences sp = getSharedPreferences(
Salva_Preferences.PREFERENCES_NAME, MODE_PRIVATE);

/* Conexão */

/* recupera tipo de conexao */
if (sp.getInt("connect", -1) == 0) {

confi.setConexao(0);
} else if (sp.getInt("connect", -1) == 1) {

confi.setConexao(1);

} else {

confi.setConexao(-1);

}
/* fim da recuperaçao do tipo de conexao */

/* Recupera o host */
confi.setHost(sp.getString("host", ""));

/* Recupera a porta de conexao */
confi.setPortaHost(sp.getInt("port", 0));

}

}

@Override
public void onResultConexao(Configuracoes configuracoes) {
confi.setHost(configuracoes.getHost());
Log.d("Config - onResultConexao","Valor do host informado " + String.valueOf(confi.getHost()));
confi.setPortaHost(configuracoes.getPortaHost());
Log.d("Config - onResultConexao","Porta informada " + String.valueOf(confi.getPortaHost()));
confi.setConexao(configuracoes.getConexao());
Log.d("Config - onResultConexao","Tipo de conexao informada " + String.valueOf(configuracoes.getConexao()));

}

}


 Fragment A:
public class ConfigConexao extends Fragment {

onconfigconexao iconexao;
private Configuracoes c;

/*
* Comunicação
*/
private EditText etHost;
private EditText etPorta;
private RadioButton rbWifi;
private RadioButton rb3g;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {

View view = inflater.inflate(R.layout.configuracao_conexao, null);
c = new Configuracoes();

// instanciacomponentes();

etHost = (EditText) view.findViewById(R.id.etHost);
etPorta = (EditText) view.findViewById(R.id.etPorta);
rbWifi = (RadioButton) view.findViewById(R.id.rbWifi);
rb3g = (RadioButton) view.findViewById(R.id.rb3g);

return view;
}

@Override
public void onPause() {
super.onPause();

Log.d("Fragment ConfigConexao", "Metodo onPause");

if (c != null) {

c.setHost(etHost.getText().toString());
c.setPortaHost(Integer.parseInt(etPorta.getText().toString()));

if (rbWifi.isChecked()) {

c.setConexao(0);

} else if (rb3g.isChecked()) {

c.setConexao(1);

} else {

c.setConexao(-1);

}

}

/* Recupeara a activity */
iconexao = (onconfigconexao) getActivity();
if (iconexao != null) {
if (c != null) {
iconexao.onResultConexao(c);
}

} else {

Toast.makeText(getActivity(), "Não foi possivel gravar as informações",
Toast.LENGTH_LONG).show();
Log.e("ConfigConexao - Metodo onPause", "Erro ao retornar os dados");

}

}

@Override
public void onResume() {
super.onResume();

Log.d("ConfigConexao - onResume", "onResume sendo executado");

/*Bundle b = getArguments();
if (b != null) {

c = (Configuracoes) b.getSerializable("configuracoes");

if (c != null) {

etHost.setText(c.getHost());
etPorta.setText(String.valueOf(c.getPortaHost()));

if (c.getConexao() == 0) {

rbWifi.setChecked(true);
rb3g.setChecked(false);
} else if (c.getConexao() == 1) {

rbWifi.setChecked(false);
rb3g.setChecked(true);
} else {

rb3g.setChecked(false);
rb3g.setChecked(false);
}

}

}*/
iconexao = (onconfigconexao) getActivity();
iconexao.onResultConexao(c);
if (c != null) {

etHost.setText(c.getHost());
etPorta.setText(String.valueOf(c.getPortaHost()));

if (c.getConexao() == 0) {

rbWifi.setChecked(true);
rb3g.setChecked(false);
} else if (c.getConexao() == 1) {

rbWifi.setChecked(false);
rb3g.setChecked(true);
} else {

rb3g.setChecked(false);
rb3g.setChecked(false);
}

}

}

public interface onconfigconexao {

public void onResultConexao(Configuracoes conf);

}

}

Fragment B:

ublic class ConfigComunicacao extends Fragment {

/*
* Envio de Email
*/
private EditText edtSMTP;
private EditText edtPorta;
private EditText edtContaEmail;
private EditText edtUsuarioEmail;
private EditText edtSenha;
private EditText edtAssunto;
private CheckBox chkUsarSSL;
private CheckBox chkEnviaEmail;
private EditText edtMsgPadrao;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {

View view = inflater.inflate(R.layout.configucao_comunicacao, null);

instanciacomponentes();

return view;
}

private void instanciacomponentes() {

/*
* Envio de Email
*/

View view = getView();

if (view != null) {

edtSMTP = (EditText) view.findViewById(R.id.edtSMTP);
edtPorta = (EditText) view.findViewById(R.id.edtPorta);
edtContaEmail = (EditText) view.findViewById(
R.id.edtContaEmail);
edtUsuarioEmail = (EditText) view.findViewById(
R.id.edtUsuarioEmail);
edtSenha = (EditText) view.findViewById(R.id.edtSenha);
edtAssunto = (EditText) view
.findViewById(R.id.edtAssuntoEmail);
edtMsgPadrao = (EditText) view.findViewById(R.id.edtMsgPadrao);
chkUsarSSL = (CheckBox) view.findViewById(R.id.chkUsarSSL);
chkEnviaEmail = (CheckBox) view.findViewById(
R.id.chkEnviaEmail);

}

}

}



--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS

0 comentários:

Postar um comentário