BloodDonor89 Δημοσ. 24 Ιουνίου 2015 Δημοσ. 24 Ιουνίου 2015 Καλησπερα, υλοποιω μια εφαρμογουλα για ενα 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! Εψαξα αλλα δεν εχω βρει τιποτα που να δουλευει! Ευχαριστω εκ των πρωτερων!
Radiant Δημοσ. 25 Ιουνίου 2015 Δημοσ. 25 Ιουνίου 2015 Λογικό είναι να κρασάρει αφού καλείς την 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 να εμφανίζεται είτε το εικονίδιο-αμαξάκι, είτε το εικονίδιο-πόδια, τον τρόπο μετακίνησης δηλάδή.
BloodDonor89 Δημοσ. 25 Ιουνίου 2015 Μέλος Δημοσ. 25 Ιουνίου 2015 Στην ουσία αυτό που θέλει να κάνει είναι όταν ο χρήστης έχει κάνει login να του εμφανίζεται το logout. Αυτό βέβαια δεν θα πρέπει με κάποιο τρόπο να ελέγχεται από το site, εννοώ να κοιτάει αν ο χρήστης είναι συ δεδομένος τότε να εμφανιστεί το logout διαφορετικά να του εμφανίσει το login. Βρήκα έναν τρόπο. Αλλά όταν βγαίνεις από την εφαρμογή. Και ξανά μπεις θα σου εμφανιστεί πάλι πάλι το login. Ακόμα κι ας είσαι συνδεδεμένος.
Radiant Δημοσ. 25 Ιουνίου 2015 Δημοσ. 25 Ιουνίου 2015 Αυτό βέβαια δεν θα πρέπει με κάποιο τρόπο να ελέγχεται από το site, εννοώ να κοιτάει αν ο χρήστης είναι συ δεδομένος τότε να εμφανιστεί το logout διαφορετικά να του εμφανίσει το login. Από το site εννοείς την εφαρμογή ή όντως φορτώνεις site μέσα απο το app? Βρήκα έναν τρόπο. Αλλά όταν βγαίνεις από την εφαρμογή. Και ξανά μπεις θα σου εμφανιστεί πάλι πάλι το login. Ακόμα κι ας είσαι συνδεδεμένος. Αυτό λογικό έιναι. Πρέπει να αποθηκεύσεις κάπου προσωρινά το status του logged in, ώστε όταν θα βγαίνεις απο το app και ξαναμπαίνεις, εφόσον είναι ακόμα ζωντανή η εφαρμογή να τραβάει την τιμή αυτή για το logged in και άρα να κάνει στην onPrepareOptionsMenu() το εικονίδιο logout σε visible. Ξεκίνα από τα βασικά.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα