Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλησπερα, υλοποιω μια εφαρμογουλα για ενα site ενος φιλου, αλλα εχω κολλησει καπου....το πως θα κρυψω ενα item μολις πατηθει και να εμφανιστει ενα αλλο! 

 

Τι εννοω: Παταω πχ μεσα απο την εφαρμoγη to action_item1 και θελω να εμφανιστει το action_item2

 

Επισης θελω το item2 να εξ αρχης κρυφο! 

 

Για να ειναι κρυφο απο την αρχη εχω κανει αυτο: 

 

 

    @Override
    public boolean onCreateOptionsMenu(Menu menu) 
    {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu_main, menu);
        MenuItem item1 = menu.findItem(R.id.action_item2);
        item1.setVisible(false);
        return true;
    }

 

 

 

Ολα εδω ολα καλα! 

 

Οταν ομως παταω το item1 κρασαρει η εφαρμογη: 

 

 

else if (item.getItemId() == R.id.action_item1)
        {            
            item.setVisible(false);
            MenuItem item2 = (MenuItem) findViewById(R.id.action_item2);
            item2.setVisible(true);
        }

 

 

 

Αλλα κρασαρει η εφαρμογη! 

 

Αν βαλω μονο αυτο:

 

 

else if (item.getItemId() == R.id.action_item1)
        {​            
            item.setVisible(false);           
        }

 

 

 

τοτε λειτουργει μια χαρα, αλλα δεν ξερω τι να κανω για να εμφανιστει το item2

 

Δουλευω με το android studio! 

 

Εψαξα αλλα δεν εχω βρει τιποτα που να δουλευει!

 

Ευχαριστω εκ των πρωτερων!

Δημοσ.

Λογικό είναι να κρασάρει αφού καλείς την findViewById εκτός της onCreateOptionsMenu. Χρειάζεσαι δηλαδή ένα instance του inflated menu. 

 

Για να κάνεις δυναμικά αλλάγές στο menu του actionbar/toolbar χρησιμοποιείς την onPrepareOptionsMenu(Menu menu). Αυτό σε καλύπτει είτε θες να αντικαταστήσεις το item1 με το item2 και το αντίστροφο, ή να εξαρτάται η ορατότητα του item2 απο το item1. Η λογική είναι ότι στην onOptionsItemSelected() αφού αλλάξεις με βάση το ποιο item πατήθηκε τις μεταβλητές/συνθήκες κλπ, στη συνέχεια καλείς την invalidateOptionsMenu() που με τη σειρά της καλέι την onPrepareOptionsMenu(Menu menu). 

 

Και απο τα επίσημα docs.

 

edit: Και ένα κλασικό παράδειγμα της χρήσης των παραπάνω είναι το navigation drawer, όπου όταν ο drawer ανοίγει τότε αποκρύπρει τα action icons/items απο το menu και όταν κλείνει τα εμφανίζει.

 

edit2: Αν απλά θές να φαίνεται μια το item1 και όταν το πατάς το item2 αλλά ποτέ και τα 2 ταυτόχρονα, τότε δε χρειάζεται να παίξεις με visibilty. Απλά ορίζεις μόνο ένα item στο menu και στην onPrepareOptionsMenu του δίνεις τη σωστή τιμή(member variable λογικά) και το ανάλογο icon. Πρόσφατα πχ έκανα κάτι παρόμοιο σε ένα GoogleMaps Activity που ήθελα στο toolbar να εμφανίζεται είτε το εικονίδιο-αμαξάκι, είτε το εικονίδιο-πόδια, τον τρόπο μετακίνησης δηλάδή.

Δημοσ.

Στην ουσία αυτό που θέλει να κάνει είναι όταν ο χρήστης έχει κάνει login να του εμφανίζεται το logout.

 

Αυτό βέβαια δεν θα πρέπει με κάποιο τρόπο να ελέγχεται από το site, εννοώ να κοιτάει αν ο χρήστης είναι συ δεδομένος τότε να εμφανιστεί το logout διαφορετικά να του εμφανίσει το login.

 

Βρήκα έναν τρόπο. Αλλά όταν βγαίνεις από την εφαρμογή. Και ξανά μπεις θα σου εμφανιστεί πάλι πάλι το login. Ακόμα κι ας είσαι συνδεδεμένος.

Δημοσ.

Αυτό βέβαια δεν θα πρέπει με κάποιο τρόπο να ελέγχεται από το site, εννοώ να κοιτάει αν ο χρήστης είναι συ δεδομένος τότε να εμφανιστεί το logout διαφορετικά να του εμφανίσει το login.

 

Από το site εννοείς την εφαρμογή ή όντως φορτώνεις site μέσα απο το app?

 

 

Βρήκα έναν τρόπο. Αλλά όταν βγαίνεις από την εφαρμογή. Και ξανά μπεις θα σου εμφανιστεί πάλι πάλι το login. Ακόμα κι ας είσαι συνδεδεμένος.

 

Αυτό λογικό έιναι. Πρέπει να αποθηκεύσεις κάπου προσωρινά το status του logged in, ώστε όταν θα βγαίνεις απο το app και ξαναμπαίνεις, εφόσον είναι ακόμα ζωντανή η εφαρμογή να τραβάει την τιμή αυτή για το logged in και άρα να κάνει στην onPrepareOptionsMenu() το εικονίδιο logout σε visible. Ξεκίνα από τα βασικά.

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...