Boa tarde a todos estou começando a utilizar o fragment no Android.
Fragment A:
Fragment B:
-- 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.
0 comentários:
Postar um comentário