A SingleFragment Classe d'activité pour le traitement de transactions fragmentComment gérer le retour effectué lorsque l'activité est attachée à un fragment différent basé sur SharedPrefrence?
public abstract class SingleFragmentActivity extends AppCompatActivity {
protected abstract Fragment createFragment();
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fragment);
FragmentManager fragmentManager = getSupportFragmentManager();
Fragment fragment = fragmentManager.findFragmentById(R.id.fragment_container);
if (fragment == null) {
fragment = createFragment();
fragmentManager
.beginTransaction()
.add(R.id.fragment_container, fragment)
.commit();
}
}
}
Ce code de transaction fragment de poignée pour l'activité correspondante. Quand j'étend la classe d'activité à fragment unique activité comme celui-ci
public class DashboardActivity extends SingleFragmentActivity{
@Override
protected Fragment createFragment() {
return new DashboardFragment().newInstance();
}
}
Maintenant nouvelle instance du fragment est vue qui détiennent de bouton sur la base préfrence partagée stockée.
public class DashboardFragment extends Fragment {
private SessionManager sessions;
private Button buttonAddCustomer, buttonViewCustomer;
private Button buttonAddService, buttonViewTabbedCustomer;
private LinearLayout linearAdmin, linearCustomer;
public Fragment newInstance() {
return new DashboardFragment();
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
sessions = new SessionManager(getActivity());
setHasOptionsMenu(true);
sessions.checkLogin();
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_dashboard, container, false);
linearCustomer = view.findViewById(R.id.user_panel);
linearAdmin = view.findViewById(R.id.admin_panel);
buttonAddService = view.findViewById(R.id.btn_add_service);
buttonViewTabbedCustomer = view.findViewById(R.id.btn_customer_tab);
buttonAddCustomer = view.findViewById(R.id.btn_add_customer);
buttonViewCustomer = view.findViewById(R.id.btn_customer_final);
if (SharedHelper.getSP(getActivity(), "emp_type").equalsIgnoreCase("admin")) {
buttonAddService.setVisibility(View.VISIBLE);
buttonViewTabbedCustomer.setVisibility(View.VISIBLE);
//Visibility Gone
buttonAddCustomer.setVisibility(View.INVISIBLE);
buttonViewCustomer.setVisibility(View.INVISIBLE);
} else if (SharedHelper.getSP(getActivity(), "emp_type").equalsIgnoreCase("user")) {
buttonAddCustomer.setVisibility(View.VISIBLE);
buttonViewCustomer.setVisibility(View.VISIBLE);
//Visibility Gone
buttonAddService.setVisibility(View.INVISIBLE);
buttonViewTabbedCustomer.setVisibility(View.INVISIBLE);
}
return view;
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.menu_dash, menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case R.id.logout:
sessions.logoutUser();
}
return super.onOptionsItemSelected(item);
}
}
Maintenant, le problème est quand j'avais le type admin stocké de préférence partagée sur le bouton connexion de côté administrateur sont affichés et lorsque l'utilisateur préférences partagés sont stockés vue correspondant préférence partagée sont cacher et représentés lorsque le bouton de presse Retour est cliqué sur le La vue du bouton est répétée deux fois et après la troisième place, elle est totalement effacée. J'ai eu une question comment fermer l'activité avec le fragment correspondant.
Avez-vous vu que mon activité est étend à SingleFragmentActivity. Alors, comment serait-il possible –