IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

interaction keyevent et action bar dans un fragment


Sujet :

Android

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    artisan
    Inscrit en
    Octobre 2013
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : artisan
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2013
    Messages : 47
    Points : 30
    Points
    30
    Par défaut interaction keyevent et action bar dans un fragment
    Bonjour,

    J'ai une activité appelons la MainFragment qui implémente un tab listener:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public class MainFragment extends FragmentActivity implements
    		ActionBar.TabListener {
    // le passage entre tab est géré par un tabsPagerAdapter
    }
    Les 3 tabs du viewPager correspondent à trois fragments qui gèrent des listviews : fichiers,musiques,images
    exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public class Music extends Fragment  {
    // ici je gère une listView
    }
    Je voudrais pouvoir récupérer des actions de l'utilisateur sur les items de l'actionbar crée dans MainFragment, ou sur le bouton back, ou home...et rafraîchir par exemple les listViews d'une activité en particulier.
    Sachant que je suis capable de déterminer quel fragment est à l'écran avec en récupérant la position par un int pagerPosition.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
     
    			@Override
    			public void onPageSelected(final int position) {
    				pagerPosition = position;
    				actionBar.setSelectedNavigationItem(position);
    }
    )};
    Est-ce possible?

    Je me suis inspiré de ça:
    http://envyandroid.com/archives/843/...nt-back-button

    donc dans mon MainFragment:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    public class MainFRagment extends FragmentActivity implements
    		ActionBar.TabListener { 
     
        private Music music;
     
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.pager);
            music = new Music();
     
            getSupportFragmentManager().beginTransaction()
                .add(R.id.pager, music).commit();
    	//gestion du pager..etc
        }
     
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.up: {
    // ici je renvoie vers une méthode dans mon fragment Music
                music.upPressed();
                return true;
            }
        }
        return super.onOptionsItemSelected(item);
    }
    }
    et dans mon fragment Music:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    public class Music extends Fragment  {
    .......
    @Override
    	public View onCreateView(LayoutInflater inflater, ViewGroup container,
    			Bundle savedInstanceState) {
     
    		View rootView = inflater.inflate(R.layout.music, container, false);
    .....
    }
    public void upPressed() {
    		album_art.setVisibility(View.VISIBLE);
    		album_text.setVisibility(View.VISIBLE);
    		musicGridAdapter = new MusicGridAdapter(getActivity(), R.layout.row_music, gridAlbum,"Artistes");
                    getArtistes(getActivity());
                    Toast.makeText(getActivity(), "test pour voir...",Toast.LENGTH_SHORT).show();
        }
    }
    .....
    Cette méthode est censé recharger une gridView par un adapter...elle fonctionne puisque utilisée par le fragment par ailleurs.
    En débug le code est exécuté normalement...donc l'interaction fonctionne, par contre aucune modification sur l'UI...rien ne se passe sur la gridView..l'écran reste tel quel..
    Seul le toast fonctionne..et affiche un message.

    Je ne comprends pas pourquoi...merci pour votre aide.

  2. #2
    Expert éminent

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Points : 9 149
    Points
    9 149
    Par défaut
    Salut

    Quand est ce que tu notifie à ton adapter qu'il doit se loader ou bien se rafraichir ? vu que tu créer un nouvel adapter c'est un load donc a quel moment tu données load l'adapter dans ta liste ?
    Responsable Android de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Android, consulter la page cours
    N'hésitez pas à consulter la FAQ Android et à poser vos questions sur les forums d'entraide mobile d'Android.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    artisan
    Inscrit en
    Octobre 2013
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : artisan
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2013
    Messages : 47
    Points : 30
    Points
    30
    Par défaut
    bonjour,

    désolé pour le retard de ma réponse ...

    Je recharge ma gridView dans la méthode getArtistes(getActivity()) avec grid.setAdapter(musicAdapter):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public void getArtistes(Activity activity){
    		getAllSongsFromSDCARD("Artistes", null, null, activity, null);
    		album_art.setVisibility(View.GONE);
    		album_text.setVisibility(View.GONE);
    		musicGridAdapter = new MusicGridAdapter(activity, R.layout.row_music, gridAlbum, "Artistes");
    		grid.setAdapter(musicGridAdapter);
     
    	}
    Je n'ai toujours pas pigé le truc!!

    merci

  4. #4
    Expert éminent

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Points : 9 149
    Points
    9 149
    Par défaut
    Je n'ai toujours pas pigé le truc!!
    quel truc ?
    Responsable Android de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Android, consulter la page cours
    N'hésitez pas à consulter la FAQ Android et à poser vos questions sur les forums d'entraide mobile d'Android.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    artisan
    Inscrit en
    Octobre 2013
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : artisan
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2013
    Messages : 47
    Points : 30
    Points
    30
    Par défaut
    Bonjour,

    et bien le fait que le code de la méthode s'exécute normalement,le toast apparaît, mais pas la recharge de la gridView!

    ....

  6. #6
    Expert éminent

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Points : 9 149
    Points
    9 149
    Par défaut
    Salut,

    musicGridAdapter = new MusicGridAdapter(activity, R.layout.row_music, gridAlbum, "Artistes");
    grid.setAdapter(musicGridAdapter);
    Ou est ce que tu récupère la variable grid ?

    Qu'est ce que tu as à l'intérieur de ta variable grid ?

    Est ce que l'on pourrait voir ton adapter MusicGridAdapter ?
    Responsable Android de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Android, consulter la page cours
    N'hésitez pas à consulter la FAQ Android et à poser vos questions sur les forums d'entraide mobile d'Android.

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    artisan
    Inscrit en
    Octobre 2013
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : artisan
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2013
    Messages : 47
    Points : 30
    Points
    30
    Par défaut
    Bonjour,

    ma variable grid est défini dans MusicActivity:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    public class MusicActivity extends Fragment  {
    ....
    GridView grid;
    MusicGridAdapter musicGridAdapter;
    ....
     
    	public View onCreateView(LayoutInflater inflater, ViewGroup container,
    			Bundle savedInstanceState) {
     
    		View rootView = inflater.inflate(R.layout.music, container, false);
    		grid = (GridView)rootView.findViewById(R.id.music_grid);
    		....
    	}
    	.....	
    	public void upPressed() {
    		album_art.setVisibility(View.VISIBLE);
    		album_text.setVisibility(View.VISIBLE);
    		musicGridAdapter = new MusicGridAdapter(getActivity(), R.layout.row_music, gridAlbum,"Artistes");
            getArtistes(getActivity());
            Toast.makeText(getActivity(), "test pour voir...",Toast.LENGTH_SHORT).show();
        }
     
    	public void getArtistes(Activity activity){
    		getAllSongsFromSDCARD("Artistes", null, null, activity, null);
    		album_art.setVisibility(View.GONE);
    		album_text.setVisibility(View.GONE);
    		musicGridAdapter = new MusicGridAdapter(activity, R.layout.row_music, gridAlbum, "Artistes");
    		grid.setAdapter(musicGridAdapter);
     
    	}
    	.....	
    }
    Mon adapter MusicGridAdapter lui est classique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    public class MusicGridAdapter extends ArrayAdapter<ArtistesItem> {
    	Context context;
    	String type;
    	int layoutResourceId;
    	RecordHolder holder = null;
    	ArrayList<ArtistesItem> data = new ArrayList<ArtistesItem>();
     
    	View row;
     
    	public MusicGridAdapter(Context context, int layoutResourceId, ArrayList<ArtistesItem> data, String type ) {	
    		super(context, layoutResourceId, data);
    		this.layoutResourceId = layoutResourceId;
    		this.context = context;
    		this.data = data;
    		this.type = type;
     
    	}
     
    	@Override
    	public View getView(final int position, View convertView, ViewGroup parent) {
     
    		row = convertView;
    		LayoutInflater inflater = LayoutInflater.from(context);
    		final ArtistesItem artistesItem = data.get(position);
                    if ( row == null ){
    					holder = new RecordHolder();
    					row = inflater.inflate(layoutResourceId, parent, false);	
    					holder.text = (TextView) row.findViewById(R.id.item_text);
    					holder.art = (ImageView) row.findViewById(R.id.art);
    					holder.button = (ImageView) row.findViewById(R.id.button);
    					holder.selected = (ImageView) row.findViewById(R.id.selected);
    					//holder.selected.setVisibility(View.INVISIBLE);
    					holder.button.setVisibility(View.INVISIBLE);
     
    					row.setTag(holder);		
    			}
    			else {
    					holder = (RecordHolder) row.getTag();	
    				}
     
                         //ici un traitement conditionnel des rows....
                return row;
    	}
     
    	class RecordHolder {
    		TextView text;
    		ImageView art;
    		ImageView button;
    		ImageView selected;	
    	}
     
    }
    Voilà...pour ce qui est de l'activité MainFragment et le onOptionsItemSelected() c'est comme dans le premier post.

    L'adapter sa recharge et l'affichage de grid fonctionne quand appelé depuis le fragment .
    Le toast s'affiche bien...et l'ensemble du code est exécuté...quand upPressed() est appelé depuis MainFragment()! ...mais grid ne se recharge pas..

    Merci pour ton aide!

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    artisan
    Inscrit en
    Octobre 2013
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : artisan
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2013
    Messages : 47
    Points : 30
    Points
    30
    Par défaut
    Merci Feanorin,

    par tes questions j'ai reposé le problème, et bien sur il fallait définir grid en static!!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public class MusicActivity extends Fragment  {
    ....
    static GridView grid;
     
    ....
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Bouton overflow dans l'action bar
    Par Achille83 dans le forum Composants graphiques
    Réponses: 0
    Dernier message: 03/07/2015, 10h44
  2. Création d'une action bar avec l'utilisation des fragments
    Par sadok_fst1989 dans le forum Android
    Réponses: 3
    Dernier message: 15/06/2014, 01h06
  3. Contextual action mode dans un fragment
    Par declencher dans le forum Android
    Réponses: 1
    Dernier message: 15/05/2014, 09h07
  4. Information sur le composant action bar dans 56g
    Par devalender dans le forum Windev Mobile
    Réponses: 0
    Dernier message: 15/03/2013, 21h20
  5. Réponses: 2
    Dernier message: 03/02/2005, 08h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo