2017-09-27 3 views
-1

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.

Répondre

0

Override simplement la méthode onBackPressed dans votre activité

@Override 
public void onBackPressed() { 
    super.onBackPressed(); 
    Intent intent = new Intent(context, Activity_YourNeed.class) ; 
    startActivity(intent); 
    finish(); 
} 
+0

Avez-vous vu que mon activité est étend à SingleFragmentActivity. Alors, comment serait-il possible –