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 :

Changer fragment + URL


Sujet :

Android

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 83
    Points : 51
    Points
    51
    Par défaut Changer fragment + URL
    Bonjour à tous,
    Dans une application, j'ai une petite dizaine de pages sous forme de fragments pointant chacune sur un xml contenant un webview, dans chaque fragment, j'ai placé l'url.
    Je me demandais s'il n'était pas possible de n'utiliser qu'un fragment et une page xml en partant de mon main actictivity qui contient les redirections vers les fragments.

    Un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    case 0:
                    objFragment = new menu1_Fragment() && url = www.foobar/1;
                    break;
                case 1:
                    objFragment = new menu1_Fragment() && url = www.foobar/2;
                    break;
                case 2:
                    objFragment = new menu1_Fragment() && url = www/foobar/3;
                    break;
    ...
    Pour la partie main et :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    WebView WebView = (WebView) rootview.findViewById(R.id.webView1);
                WebView.getSettings().setJavaScriptEnabled(true);
                WebView.loadUrl(URL);
    Pour le fragment.

    Est-ce faisable ?

    (j'ai cherché mais je n'ai trop rien trouvé)

  2. #2
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Points : 5 072
    Points
    5 072
    Par défaut
    Oui, et c'est même mieux.
    Trouves un moyen pour stocker tes URL's (ou déduire comment les construire), passe l'information à ton Fragment et calibre ta WebView avec cette URL. Tu factorises ainsi les comportements et ton code, facilitant les évolutions et la maintenance.
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 83
    Points : 51
    Points
    51
    Par défaut
    Haa je savais que c'était faisable !!!

    Bon, si je résume.

    étape 1, stocker les url dans la page main.

    Si je ne m'abuse, je peux faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    public String url1="www.foobar.fr";
    public String url2="www.foobar.fr/2";
    étape 2, quand je clique sur une case, en plus d'afficher un fragment, je prends la valeur d'une des string que j'ai stockée avant et je la mets dans ma poche. (là je ne sais pas du tout comment faire)

    étape 3, quand j'affiche le fragment, je sors de ma poche ce que j'y avais rangé avant et "l'injecte" dans le code du fragment.(là je vois à 50%)

    Ça donnerait un truc comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public String url="ce que j'ai dans la poche";
    ....
     WebView.loadUrl(url);
    Ai-je bon ?

    Je vais chercher du côté de l'étape 2, si t'as des liens je suis preneur ^_^

    (Merci Hizin)

  4. #4
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    etape 2: on ne la met pas dans sa poche, mais dans la poche du fragment....

    new WebViewFragment(url); peut être une solution....


    etape 1: on peut même s'amuser à stocker dans les boutons l'url du fragment (les urls seront alors définies dans le XML de l'UI, et pas dans le code). Exemple (dans le xml) dans les paramètres d'un bouton:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    android:onClick="onNewWebView"
    android:tag="www.foo.bar/view"

    et dans le code (je n'y met pas la tringlerie du fragment manager):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public void onNewWebView(View v)
    {
         String url = v.getTag();
         new WebViewFragment(url); <= on setup le nouveau fragment
    }
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 83
    Points : 51
    Points
    51
    Par défaut
    Pour ta solution avec les boutons, je ne vois pas trop comment l'exploiter n'ayant pas de boutons dans mes xml.

    Je mets mon code histoire de donner plus d'infos.

    MainActivity :
    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    public class MainActivity extends ActionBarActivity
            implements NavigationDrawerCallbacks {
     
        /**
         * Fragment managing the behaviors, interactions and presentation of the navigation drawer.
         */
        private NavigationDrawerFragment mNavigationDrawerFragment;
        private Toolbar mToolbar;
     
        private String mParam1;
     
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            mToolbar = (Toolbar) findViewById(R.id.toolbar_actionbar);
            setSupportActionBar(mToolbar);
     
            mNavigationDrawerFragment = (NavigationDrawerFragment)
                    getFragmentManager().findFragmentById(R.id.fragment_drawer);
     
            // Set up the drawer.
            mNavigationDrawerFragment.setup(R.id.fragment_drawer, (DrawerLayout) findViewById(R.id.drawer), mToolbar);
     
        }
     
        @Override
        public void onNavigationDrawerItemSelected(int position) {
            Fragment objFragment = null;
     
            switch (position) {
                case 0:
                    objFragment = new menu1_Fragment();
                    break;
                case 1:
                    objFragment = new menu2_Fragment();
                    break;
                case 2:
                    objFragment = new menu3_Fragment();
                    break;
                case 3:
                    objFragment = new menu4_Fragment();
                    break;
                case 4:
                    objFragment = new menu5_Fragment();
                    break;
                case 5:
                    objFragment = new menu6_Fragment();
                    break;
                case 6:
                    objFragment = new menu8_Fragment();
                    break;
                case 7:
                    objFragment = new menu9_Fragment();
                    break;
                case 8:
                    objFragment = new menu7_Fragment();
                    break;
            }
     
            FragmentManager fragmentManager = getFragmentManager();
            fragmentManager.beginTransaction()
                    .replace(R.id.container, objFragment)
                    .commit();
        }
     
     
        @Override
        public void onBackPressed() {
            if (mNavigationDrawerFragment.isDrawerOpen())
                mNavigationDrawerFragment.closeDrawer();
            else
                super.onBackPressed();
        }
     
     
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            if (!mNavigationDrawerFragment.isDrawerOpen()) {
                // Only show items in the action bar relevant to this screen
                // if the drawer is not showing. Otherwise, let the drawer
                // decide what to show in the action bar.
                getMenuInflater().inflate(R.menu.main, menu);
                return true;
            }
            return super.onCreateOptionsMenu(menu);
        }
     
     
        /*@Override
        public boolean onOptionsItemSelected(MenuItem item) {
            int id = item.getItemId();
            return super.onOptionsItemSelected(item);
        }*/
     
     
    }

    NavigationDrawerFragment :
    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    public class NavigationDrawerFragment extends Fragment implements NavigationDrawerCallbacks {
     
        /**
         * Remember the position of the selected item.
         */
        private static final String STATE_SELECTED_POSITION = "selected_navigation_drawer_position";
     
        /**
         * Per the design guidelines, you should show the drawer on launch until the user manually
         * expands it. This shared preference tracks this.
         */
        private static final String PREF_USER_LEARNED_DRAWER = "navigation_drawer_learned";
     
        /**
         * A pointer to the current callbacks instance (the Activity).
         */
        private NavigationDrawerCallbacks mCallbacks;
     
        /**
         * Helper component that ties the action bar to the navigation drawer.
         */
        private ActionBarDrawerToggle mActionBarDrawerToggle;
     
        private DrawerLayout mDrawerLayout;
        private RecyclerView mDrawerList;
        private View mFragmentContainerView;
     
        private int mCurrentSelectedPosition = 0;
        private boolean mFromSavedInstanceState;
        private boolean mUserLearnedDrawer;
     
     
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
     
            // Read in the flag indicating whether or not the user has demonstrated awareness of the
            // drawer. See PREF_USER_LEARNED_DRAWER for details.
            SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getActivity());
            mUserLearnedDrawer = sp.getBoolean(PREF_USER_LEARNED_DRAWER, false);
     
            if (savedInstanceState != null) {
                mCurrentSelectedPosition = savedInstanceState.getInt(STATE_SELECTED_POSITION);
                mFromSavedInstanceState = true;
            }
        }
     
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            View view = inflater.inflate(R.layout.fragment_navigation_drawer, container, false);
            mDrawerList = (RecyclerView) view.findViewById(R.id.drawerList);
            LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity());
            layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
            mDrawerList.setLayoutManager(layoutManager);
            mDrawerList.setHasFixedSize(true);
     
            final List<NavigationItem> navigationItems = getMenu();
            NavigationDrawerAdapter adapter = new NavigationDrawerAdapter(navigationItems);
            adapter.setNavigationDrawerCallbacks(this);
            mDrawerList.setAdapter(adapter);
            selectItem(mCurrentSelectedPosition);
            return view;
        }
     
        public boolean isDrawerOpen() {
            return mDrawerLayout != null && mDrawerLayout.isDrawerOpen(mFragmentContainerView);
        }
     
        public ActionBarDrawerToggle getActionBarDrawerToggle() {
            return mActionBarDrawerToggle;
        }
     
        public DrawerLayout getDrawerLayout() {
            return mDrawerLayout;
        }
     
        @Override
        public void onNavigationDrawerItemSelected(int position) {
            selectItem(position);
        }
     
        public List<NavigationItem> getMenu() {
            List<NavigationItem> items = new ArrayList<NavigationItem>();
            items.add(new NavigationItem("Actu", getResources().getDrawable(R.drawable.actus)));
            items.add(new NavigationItem("Classement", getResources().getDrawable(R.drawable.classement)));
            items.add(new NavigationItem("Calendrier", getResources().getDrawable(R.drawable.calendrier)));
            items.add(new NavigationItem("Resultats", getResources().getDrawable(R.drawable.resultats)));
            items.add(new NavigationItem("Effectif", getResources().getDrawable(R.drawable.effectif)));
            items.add(new NavigationItem("Morning news", getResources().getDrawable(R.drawable.morningnews)));
            items.add(new NavigationItem("Sondages", getResources().getDrawable(R.drawable.sondages)));
            items.add(new NavigationItem("Galerie", getResources().getDrawable(R.drawable.galerie)));
            items.add(new NavigationItem("Credits", getResources().getDrawable(R.drawable.credits)));
            return items;
        }
     
        /**
         * Users of this fragment must call this method to set up the navigation drawer interactions.
         *
         * @param fragmentId   The android:id of this fragment in its activity's layout.
         * @param drawerLayout The DrawerLayout containing this fragment's UI.
         * @param toolbar      The Toolbar of the activity.
         */
        public void setup(int fragmentId, DrawerLayout drawerLayout, Toolbar toolbar) {
            mFragmentContainerView = getActivity().findViewById(fragmentId);
            mDrawerLayout = drawerLayout;
     
            mDrawerLayout.setStatusBarBackgroundColor(getResources().getColor(R.color.myPrimaryDarkColor));
     
            mActionBarDrawerToggle = new ActionBarDrawerToggle(getActivity(), mDrawerLayout, toolbar, R.string.drawer_open, R.string.drawer_close) {
                @Override
                public void onDrawerClosed(View drawerView) {
                    super.onDrawerClosed(drawerView);
                    if (!isAdded()) return;
     
                    getActivity().invalidateOptionsMenu(); // calls onPrepareOptionsMenu()
                }
     
                @Override
                public void onDrawerOpened(View drawerView) {
                    super.onDrawerOpened(drawerView);
                    if (!isAdded()) return;
                    if (!mUserLearnedDrawer) {
                        mUserLearnedDrawer = true;
                        SharedPreferences sp = PreferenceManager
                                .getDefaultSharedPreferences(getActivity());
                        sp.edit().putBoolean(PREF_USER_LEARNED_DRAWER, true).apply();
                    }
                    getActivity().invalidateOptionsMenu(); // calls onPrepareOptionsMenu()
                }
            };
     
            // If the user hasn't 'learned' about the drawer, open it to introduce them to the drawer,
            // per the navigation drawer design guidelines.
            if (!mUserLearnedDrawer && !mFromSavedInstanceState) {
                mDrawerLayout.openDrawer(mFragmentContainerView);
            }
     
            // Defer code dependent on restoration of previous instance state.
            mDrawerLayout.post(new Runnable() {
                @Override
                public void run() {
                    mActionBarDrawerToggle.syncState();
                }
            });
     
            mDrawerLayout.setDrawerListener(mActionBarDrawerToggle);
        }
     
        private void selectItem(int position) {
            mCurrentSelectedPosition = position;
            if (mDrawerLayout != null) {
                mDrawerLayout.closeDrawer(mFragmentContainerView);
            }
            if (mCallbacks != null) {
                mCallbacks.onNavigationDrawerItemSelected(position);
            }
            ((NavigationDrawerAdapter) mDrawerList.getAdapter()).selectPosition(position);
        }
     
        public void openDrawer() {
            mDrawerLayout.openDrawer(mFragmentContainerView);
        }
     
        public void closeDrawer() {
            mDrawerLayout.closeDrawer(mFragmentContainerView);
        }
     
        @Override
        public void onAttach(Activity activity) {
            super.onAttach(activity);
            try {
                mCallbacks = (NavigationDrawerCallbacks) activity;
            } catch (ClassCastException e) {
                throw new ClassCastException("Activity must implement NavigationDrawerCallbacks.");
            }
        }
     
        @Override
        public void onDetach() {
            super.onDetach();
            mCallbacks = null;
        }
     
        @Override
        public void onSaveInstanceState(Bundle outState) {
            super.onSaveInstanceState(outState);
            outState.putInt(STATE_SELECTED_POSITION, mCurrentSelectedPosition);
        }
     
        @Override
        public void onConfigurationChanged(Configuration newConfig) {
            super.onConfigurationChanged(newConfig);
            // Forward the new configuration the drawer toggle component.
            mActionBarDrawerToggle.onConfigurationChanged(newConfig);
        }
     
        /*public void setUserData(String user, String email, Bitmap avatar) {
            ImageView avatarContainer = (ImageView) mFragmentContainerView.findViewById(R.id.imgAvatar);
            ((TextView) mFragmentContainerView.findViewById(R.id.txtUserEmail)).setText(email);
            ((TextView) mFragmentContainerView.findViewById(R.id.txtUsername)).setText(user);
            avatarContainer.setImageDrawable(new RoundImage(avatar));
        }*/
     
        public View getGoogleDrawer() {
            return mFragmentContainerView.findViewById(R.id.googleDrawer);
        }
     
        public static class RoundImage extends Drawable {
            private final Bitmap mBitmap;
            private final Paint mPaint;
            private final RectF mRectF;
            private final int mBitmapWidth;
            private final int mBitmapHeight;
     
            public RoundImage(Bitmap bitmap) {
                mBitmap = bitmap;
                mRectF = new RectF();
                mPaint = new Paint();
                mPaint.setAntiAlias(true);
                mPaint.setDither(true);
                final BitmapShader shader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
                mPaint.setShader(shader);
     
                mBitmapWidth = mBitmap.getWidth();
                mBitmapHeight = mBitmap.getHeight();
            }
     
            @Override
            public void draw(Canvas canvas) {
                canvas.drawOval(mRectF, mPaint);
            }
     
            @Override
            protected void onBoundsChange(Rect bounds) {
                super.onBoundsChange(bounds);
                mRectF.set(bounds);
            }
     
            @Override
            public void setAlpha(int alpha) {
                if (mPaint.getAlpha() != alpha) {
                    mPaint.setAlpha(alpha);
                    invalidateSelf();
                }
            }
     
            @Override
            public void setColorFilter(ColorFilter cf) {
                mPaint.setColorFilter(cf);
            }
     
            @Override
            public int getOpacity() {
                return PixelFormat.TRANSLUCENT;
            }
     
            @Override
            public int getIntrinsicWidth() {
                return mBitmapWidth;
            }
     
            @Override
            public int getIntrinsicHeight() {
                return mBitmapHeight;
            }
     
            public void setAntiAlias(boolean aa) {
                mPaint.setAntiAlias(aa);
                invalidateSelf();
            }
     
            @Override
            public void setFilterBitmap(boolean filter) {
                mPaint.setFilterBitmap(filter);
                invalidateSelf();
            }
     
            @Override
            public void setDither(boolean dither) {
                mPaint.setDither(dither);
                invalidateSelf();
            }
     
            public Bitmap getBitmap() {
                return mBitmap;
            }
     
        }
    }
    Les fragments :
    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
    public class menu1_Fragment extends Fragment {
        View rootview;
        @Nullable
        @Override
     
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            rootview = inflater.inflate(R.layout.xml1, container, false);
     
            ConnectivityManager connMgr = (ConnectivityManager) getActivity()
                    .getSystemService(Context.CONNECTIVITY_SERVICE);
     
            NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
     
            if (networkInfo != null && networkInfo.isConnected()) {
                WebView WebView = (WebView) rootview.findViewById(R.id.xml1);
                WebView.getSettings().setJavaScriptEnabled(true);
                WebView.loadUrl("www.foo.bar");
            }
            else
            {
                Toast.makeText(rootview.getContext(), "Vous devez avoir une connexion internet.", Toast.LENGTH_SHORT).show();
            }
     
            return rootview;
        }
     
    }

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 83
    Points : 51
    Points
    51
    Par défaut
    Bon, je suis pommé...

    J'ai trouvé deux méthodes qui semblent aller dans mon sens, la première : http://mathias-seguy.developpez.com/...ments/#LVI-C-1

    Le problème, je ne comprends pas où la partie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Bundle arguments = new Bundle();
    arguments.putString(ItemDetailFragment.ARG_ITEM_ID, id);
    ItemDetailFragment fragment = new ItemDetailFragment();
    fragment.setArguments(arguments);
    doit aller...

    La seconde méthode, dans la liste dans laquelle je déclare le nom de la section et l'image qui va avec, j'ai rajouté une entrée pour ajouter l'url, le problème, je ne sais comment récupérer cette valeur à la sélection dans le menu pour l'envoyer dans le fragment...

  7. #7
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Points : 5 072
    Points
    5 072
    Par défaut
    Ton bout de code doit aller avant le commit du Fragment.
    Tu associes des informations à celui-ci (dans ton cas, une String ou une URL), il faut dont le faire avant que celui-ci ne soit poussé au Manager

    Une fois ça fait, tu devrais modifier le code de ton Fragment pour qu'ils prennent les extra, et choppent la donnée qui est passée dans le Bundle
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 83
    Points : 51
    Points
    51
    Par défaut
    ok, là tu m'as perdu ^_^

    Dans mes codes j'ai :
    MainActivity
    NavigationDrawerAdapter
    NavigationDrawerCallback
    NavigationDrawerFragment
    NavigationItem

    Et les fragments (à terme plus qu'un seul si j'arrive à comprendre ce qu'il faut faire)

    Pour toi, à quel moment je dois implanter ce code?

  9. #9
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Points : 5 072
    Points
    5 072
    Par défaut
    Comme écrit, avant le commit du Fragment

    Code Java : 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
            switch (position) {
                case 0:
                    objFragment = new menu1_Fragment();
                    break;
                case 1:
                    objFragment = new menu2_Fragment();
                    break;
                case 2:
                    objFragment = new menu3_Fragment();
                    break;
                case 3:
                    objFragment = new menu4_Fragment();
                    break;
                case 4:
                    objFragment = new menu5_Fragment();
                    break;
                case 5:
                    objFragment = new menu6_Fragment();
                    break;
                case 6:
                    objFragment = new menu8_Fragment();
                    break;
                case 7:
                    objFragment = new menu9_Fragment();
                    break;
                case 8:
                    objFragment = new menu7_Fragment();
                    break;
            }
     
            FragmentManager fragmentManager = getFragmentManager();
            fragmentManager.beginTransaction()
                    .replace(R.id.container, objFragment)
                    .commit();
        }
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 83
    Points : 51
    Points
    51
    Par défaut
    Bon, ça avance, mais c'est pas encore ça...(je vais repartir sur bash moi...)
    J'ai surement encore du zapper un truc ...

    J'ai placé dans main :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Bundle args= new Bundle();
    
    switch (position) {
        case 0:
            objFragment = new fragment();
            args.putString("url", "www.foo.bar");
            break;
    Et dans fragment :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Bundle args = getArguments();
    Toast.makeText(getActivity(), "plop" + args , Toast.LENGTH_LONG).show();
    (Pour le moment je veux juste afficher la string dans un toast avant de l'utiliser dans un WebView histoire de voir ce qu'il se passe)

    J'ai donc un toast affichant : plopnull ....



    (j'ai envie de remplacer le plop par T'es vraiment)

  11. #11
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    La tu nous montres des extraits de code... donc impossible de savoir ou et quand tout ça est appelé....

    Ensuite pour passer des données de l'activité au fragment il y a au moins 3 possibilités:
    * Les args: la plus "android" permettant le passage de données entre fragments par l'intermédiaire du fragment manager.
    * Pendant la construction: un paramètre au constructeur du fragment marche très très bien.
    * Par simple fonction: avec un setter du genre "setUrl" dans le fragment, stockage dans une variable membre de celui-ci, et réutilisation lors du createView.
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 83
    Points : 51
    Points
    51
    Par défaut
    Bonjour Nicroman, tous mes codes sont dispos en post #5, je les remets ici pour éviter de scroller.

    MainActivity :
    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    import android.app.Fragment;
    import android.app.FragmentManager;
    import android.content.Intent;
    import android.graphics.BitmapFactory;
    import android.os.Bundle;
    import android.provider.ContactsContract;
    import android.support.v4.widget.DrawerLayout;
    import android.support.v7.app.ActionBarActivity;
    import android.support.v7.widget.Toolbar;
    import android.view.Menu;
     
     
    public class MainActivity extends ActionBarActivity
            implements NavigationDrawerCallbacks {
     
        /**
         * Fragment managing the behaviors, interactions and presentation of the navigation drawer.
         */
        private NavigationDrawerFragment mNavigationDrawerFragment;
        private Toolbar mToolbar;
     
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            mToolbar = (Toolbar) findViewById(R.id.toolbar_actionbar);
            setSupportActionBar(mToolbar);
     
            mNavigationDrawerFragment = (NavigationDrawerFragment)
                    getFragmentManager().findFragmentById(R.id.fragment_drawer);
     
            // Set up the drawer.
            mNavigationDrawerFragment.setup(R.id.fragment_drawer, (DrawerLayout) findViewById(R.id.drawer), mToolbar);
     
        }
     
        @Override
        public void onNavigationDrawerItemSelected(int position) {
            Fragment objFragment = null;
            switch (position) {
                case 0:
                    objFragment = new fragment();
                    break;
                case 1:
                    objFragment = new menu2_Fragment();
                    break;
                case 2:
                    objFragment = new menu3_Fragment();
                    break;
                case 3:
                    objFragment = new menu4_Fragment();
                    break;
                case 4:
                    objFragment = new menu5_Fragment();
                    break;
                case 5:
                    objFragment = new menu6_Fragment();
                    break;
                case 6:
                    objFragment = new menu8_Fragment();
                    break;
                case 7:
                    objFragment = new menu9_Fragment();
                    break;
                case 8:
                    objFragment = new menu7_Fragment();
                    break;
            }
     
            FragmentManager fragmentManager = getFragmentManager();
            fragmentManager.beginTransaction()
                    .replace(R.id.container, objFragment)
                    .commit();
        }
     
     
        @Override
        public void onBackPressed() {
            if (mNavigationDrawerFragment.isDrawerOpen())
                mNavigationDrawerFragment.closeDrawer();
            else
                super.onBackPressed();
        }
     
     
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            if (!mNavigationDrawerFragment.isDrawerOpen()) {
                // Only show items in the action bar relevant to this screen
                // if the drawer is not showing. Otherwise, let the drawer
                // decide what to show in the action bar.
                getMenuInflater().inflate(R.menu.main, menu);
                return true;
            }
            return super.onCreateOptionsMenu(menu);
        }
     
     
     
     
        /*@Override
        public boolean onOptionsItemSelected(MenuItem item) {
            int id = item.getItemId();
            return super.onOptionsItemSelected(item);
        }*/
     
     
    }
    NavigationDrawerAdapter :
    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    import android.os.Bundle;
    import android.support.v7.widget.RecyclerView;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.TextView;
     
    import java.util.List;
     
     
    public class NavigationDrawerAdapter extends RecyclerView.Adapter<NavigationDrawerAdapter.ViewHolder> {
     
        private List<NavigationItem> mData;
        private NavigationDrawerCallbacks mNavigationDrawerCallbacks;
        private View mSelectedView;
        private int mSelectedPosition;
     
        public NavigationDrawerAdapter(List<NavigationItem> data) {
            mData = data;
        }
     
        public NavigationDrawerCallbacks getNavigationDrawerCallbacks() {
            return mNavigationDrawerCallbacks;
        }
     
        public void setNavigationDrawerCallbacks(NavigationDrawerCallbacks navigationDrawerCallbacks) {
            mNavigationDrawerCallbacks = navigationDrawerCallbacks;
        }
     
        @Override
        public NavigationDrawerAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
            View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.drawer_row, viewGroup, false);
            final ViewHolder viewHolder = new ViewHolder(v);
            viewHolder.itemView.setClickable(true);
            viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
                                                       @Override
                                                       public void onClick(View v) {
                                                           if (mSelectedView != null) {
                                                               mSelectedView.setSelected(false);
                                                           }
                                                           mSelectedPosition = viewHolder.getAdapterPosition();
                                                           v.setSelected(true);
                                                           mSelectedView = v;
                                                           if (mNavigationDrawerCallbacks != null)
                                                               mNavigationDrawerCallbacks.onNavigationDrawerItemSelected(viewHolder.getAdapterPosition());
                                                       }
                                                   }
            );
            viewHolder.itemView.setBackgroundResource(R.drawable.row_selector);
            return viewHolder;
        }
     
        @Override
        public void onBindViewHolder(NavigationDrawerAdapter.ViewHolder viewHolder, int i) {
            viewHolder.textView.setText(mData.get(i).getText());
            viewHolder.textView.setCompoundDrawablesWithIntrinsicBounds(mData.get(i).getDrawable(), null, null, null);
            if (mSelectedPosition == i) {
                if (mSelectedView != null) {
                    mSelectedView.setSelected(false);
                }
                mSelectedPosition = i;
                mSelectedView = viewHolder.itemView;
                mSelectedView.setSelected(true);
            }
        }
     
     
        public void selectPosition(int position) {
            mSelectedPosition = position;
            notifyItemChanged(position);
        }
     
        @Override
        public int getItemCount() {
            return mData != null ? mData.size() : 0;
        }
     
        public static class ViewHolder extends RecyclerView.ViewHolder {
            public TextView textView;
     
            public ViewHolder(View itemView) {
                super(itemView);
                textView = (TextView) itemView.findViewById(R.id.item_name);
            }
        }
    }
    NavigationDrawerCallback :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public interface NavigationDrawerCallbacks {
        void onNavigationDrawerItemSelected(int position);
    }
    NavigationDrawerFragment :
    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    import android.app.Activity;
    import android.app.Fragment;
    import android.content.SharedPreferences;
    import android.content.res.Configuration;
    import android.graphics.Bitmap;
    import android.graphics.BitmapShader;
    import android.graphics.Canvas;
    import android.graphics.ColorFilter;
    import android.graphics.Paint;
    import android.graphics.PixelFormat;
    import android.graphics.Rect;
    import android.graphics.RectF;
    import android.graphics.Shader;
    import android.graphics.drawable.Drawable;
    import android.os.Bundle;
    import android.preference.PreferenceManager;
    import android.support.v7.app.ActionBarDrawerToggle;
    import android.support.v4.widget.DrawerLayout;
    import android.support.v7.widget.LinearLayoutManager;
    import android.support.v7.widget.RecyclerView;
    import android.support.v7.widget.Toolbar;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.ImageView;
    import android.widget.TextView;
     
    import java.util.ArrayList;
    import java.util.List;
     
    /**
     * Fragment used for managing interactions for and presentation of a navigation drawer.
     * See the <a href="https://developer.android.com/design/patterns/navigation-drawer.html#Interaction">
     * design guidelines</a> for a complete explanation of the behaviors implemented here.
     */
    public class NavigationDrawerFragment extends Fragment implements NavigationDrawerCallbacks {
     
        /**
         * Remember the position of the selected item.
         */
        private static final String STATE_SELECTED_POSITION = "selected_navigation_drawer_position";
     
        /**
         * Per the design guidelines, you should show the drawer on launch until the user manually
         * expands it. This shared preference tracks this.
         */
        private static final String PREF_USER_LEARNED_DRAWER = "navigation_drawer_learned";
     
        /**
         * A pointer to the current callbacks instance (the Activity).
         */
        private NavigationDrawerCallbacks mCallbacks;
     
        /**
         * Helper component that ties the action bar to the navigation drawer.
         */
        private ActionBarDrawerToggle mActionBarDrawerToggle;
     
        private DrawerLayout mDrawerLayout;
        private RecyclerView mDrawerList;
        private View mFragmentContainerView;
     
        private int mCurrentSelectedPosition = 0;
        private boolean mFromSavedInstanceState;
        private boolean mUserLearnedDrawer;
     
     
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
     
            // Read in the flag indicating whether or not the user has demonstrated awareness of the
            // drawer. See PREF_USER_LEARNED_DRAWER for details.
            SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getActivity());
            mUserLearnedDrawer = sp.getBoolean(PREF_USER_LEARNED_DRAWER, false);
     
            if (savedInstanceState != null) {
                mCurrentSelectedPosition = savedInstanceState.getInt(STATE_SELECTED_POSITION);
                mFromSavedInstanceState = true;
            }
        }
     
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            View view = inflater.inflate(R.layout.fragment_navigation_drawer, container, false);
            mDrawerList = (RecyclerView) view.findViewById(R.id.drawerList);
            LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity());
            layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
            mDrawerList.setLayoutManager(layoutManager);
            mDrawerList.setHasFixedSize(true);
     
            final List<NavigationItem> navigationItems = getMenu();
            NavigationDrawerAdapter adapter = new NavigationDrawerAdapter(navigationItems);
            adapter.setNavigationDrawerCallbacks(this);
            mDrawerList.setAdapter(adapter);
            selectItem(mCurrentSelectedPosition);
            return view;
        }
     
        public boolean isDrawerOpen() {
            return mDrawerLayout != null && mDrawerLayout.isDrawerOpen(mFragmentContainerView);
        }
     
        public ActionBarDrawerToggle getActionBarDrawerToggle() {
            return mActionBarDrawerToggle;
        }
     
        public DrawerLayout getDrawerLayout() {
            return mDrawerLayout;
        }
     
        @Override
        public void onNavigationDrawerItemSelected(int position) {
            selectItem(position);
        }
     
        public List<NavigationItem> getMenu() {
            List<NavigationItem> items = new ArrayList<NavigationItem>();
            items.add(new NavigationItem("Actu", getResources().getDrawable(R.drawable.actus),"www.foo.bar"));
            items.add(new NavigationItem("Classement", getResources().getDrawable(R.drawable.classement),"www.foo.bar"));
            items.add(new NavigationItem("Calendrier", getResources().getDrawable(R.drawable.calendrier),"www.foo.bar"));
            items.add(new NavigationItem("Resultats", getResources().getDrawable(R.drawable.resultats),"www.foo.bar"));
            items.add(new NavigationItem("Effectif", getResources().getDrawable(R.drawable.effectif),"www.foo.bar"));
            items.add(new NavigationItem("News", getResources().getDrawable(R.drawable.morningnews),"www.foo.bar"));
            items.add(new NavigationItem("Sondages", getResources().getDrawable(R.drawable.sondages),"www.foo.bar"));
            items.add(new NavigationItem("Galerie", getResources().getDrawable(R.drawable.galerie),"www.foo.bar"));
            items.add(new NavigationItem("Credits", getResources().getDrawable(R.drawable.credits),"www.foo.bar"));
            return items;
        }
     
        /**
         * Users of this fragment must call this method to set up the navigation drawer interactions.
         *
         * @param fragmentId   The android:id of this fragment in its activity's layout.
         * @param drawerLayout The DrawerLayout containing this fragment's UI.
         * @param toolbar      The Toolbar of the activity.
         */
        public void setup(int fragmentId, DrawerLayout drawerLayout, Toolbar toolbar) {
            mFragmentContainerView = getActivity().findViewById(fragmentId);
            mDrawerLayout = drawerLayout;
     
            mDrawerLayout.setStatusBarBackgroundColor(getResources().getColor(R.color.myPrimaryDarkColor));
     
            mActionBarDrawerToggle = new ActionBarDrawerToggle(getActivity(), mDrawerLayout, toolbar, R.string.drawer_open, R.string.drawer_close) {
                @Override
                public void onDrawerClosed(View drawerView) {
                    super.onDrawerClosed(drawerView);
                    if (!isAdded()) return;
     
                    getActivity().invalidateOptionsMenu(); // calls onPrepareOptionsMenu()
                }
     
                @Override
                public void onDrawerOpened(View drawerView) {
                    super.onDrawerOpened(drawerView);
                    if (!isAdded()) return;
                    if (!mUserLearnedDrawer) {
                        mUserLearnedDrawer = true;
                        SharedPreferences sp = PreferenceManager
                                .getDefaultSharedPreferences(getActivity());
                        sp.edit().putBoolean(PREF_USER_LEARNED_DRAWER, true).apply();
                    }
                    getActivity().invalidateOptionsMenu(); // calls onPrepareOptionsMenu()
                }
            };
     
            // If the user hasn't 'learned' about the drawer, open it to introduce them to the drawer,
            // per the navigation drawer design guidelines.
            if (!mUserLearnedDrawer && !mFromSavedInstanceState) {
                mDrawerLayout.openDrawer(mFragmentContainerView);
            }
     
            // Defer code dependent on restoration of previous instance state.
            mDrawerLayout.post(new Runnable() {
                @Override
                public void run() {
                    mActionBarDrawerToggle.syncState();
                }
            });
     
            mDrawerLayout.setDrawerListener(mActionBarDrawerToggle);
        }
     
        private void selectItem(int position) {
            mCurrentSelectedPosition = position;
            if (mDrawerLayout != null) {
                mDrawerLayout.closeDrawer(mFragmentContainerView);
            }
            if (mCallbacks != null) {
                mCallbacks.onNavigationDrawerItemSelected(position);
            }
            ((NavigationDrawerAdapter) mDrawerList.getAdapter()).selectPosition(position);
        }
     
        public void openDrawer() {
            mDrawerLayout.openDrawer(mFragmentContainerView);
        }
     
        public void closeDrawer() {
            mDrawerLayout.closeDrawer(mFragmentContainerView);
        }
     
        @Override
        public void onAttach(Activity activity) {
            super.onAttach(activity);
            try {
                mCallbacks = (NavigationDrawerCallbacks) activity;
            } catch (ClassCastException e) {
                throw new ClassCastException("Activity must implement NavigationDrawerCallbacks.");
            }
        }
     
        @Override
        public void onDetach() {
            super.onDetach();
            mCallbacks = null;
        }
     
        @Override
        public void onSaveInstanceState(Bundle outState) {
            super.onSaveInstanceState(outState);
            outState.putInt(STATE_SELECTED_POSITION, mCurrentSelectedPosition);
        }
     
        @Override
        public void onConfigurationChanged(Configuration newConfig) {
            super.onConfigurationChanged(newConfig);
            // Forward the new configuration the drawer toggle component.
            mActionBarDrawerToggle.onConfigurationChanged(newConfig);
        }
     
        /*public void setUserData(String user, String email, Bitmap avatar) {
            ImageView avatarContainer = (ImageView) mFragmentContainerView.findViewById(R.id.imgAvatar);
            ((TextView) mFragmentContainerView.findViewById(R.id.txtUserEmail)).setText(email);
            ((TextView) mFragmentContainerView.findViewById(R.id.txtUsername)).setText(user);
            avatarContainer.setImageDrawable(new RoundImage(avatar));
        }*/
     
        public View getGoogleDrawer() {
            return mFragmentContainerView.findViewById(R.id.googleDrawer);
        }
     
        public static class RoundImage extends Drawable {
            private final Bitmap mBitmap;
            private final Paint mPaint;
            private final RectF mRectF;
            private final int mBitmapWidth;
            private final int mBitmapHeight;
     
            public RoundImage(Bitmap bitmap) {
                mBitmap = bitmap;
                mRectF = new RectF();
                mPaint = new Paint();
                mPaint.setAntiAlias(true);
                mPaint.setDither(true);
                final BitmapShader shader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
                mPaint.setShader(shader);
     
                mBitmapWidth = mBitmap.getWidth();
                mBitmapHeight = mBitmap.getHeight();
            }
     
            @Override
            public void draw(Canvas canvas) {
                canvas.drawOval(mRectF, mPaint);
            }
     
            @Override
            protected void onBoundsChange(Rect bounds) {
                super.onBoundsChange(bounds);
                mRectF.set(bounds);
            }
     
            @Override
            public void setAlpha(int alpha) {
                if (mPaint.getAlpha() != alpha) {
                    mPaint.setAlpha(alpha);
                    invalidateSelf();
                }
            }
     
            @Override
            public void setColorFilter(ColorFilter cf) {
                mPaint.setColorFilter(cf);
            }
     
            @Override
            public int getOpacity() {
                return PixelFormat.TRANSLUCENT;
            }
     
            @Override
            public int getIntrinsicWidth() {
                return mBitmapWidth;
            }
     
            @Override
            public int getIntrinsicHeight() {
                return mBitmapHeight;
            }
     
            public void setAntiAlias(boolean aa) {
                mPaint.setAntiAlias(aa);
                invalidateSelf();
            }
     
            @Override
            public void setFilterBitmap(boolean filter) {
                mPaint.setFilterBitmap(filter);
                invalidateSelf();
            }
     
            @Override
            public void setDither(boolean dither) {
                mPaint.setDither(dither);
                invalidateSelf();
            }
     
            public Bitmap getBitmap() {
                return mBitmap;
            }
     
        }
    }
    NavigationItem :
    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
    import android.graphics.drawable.Drawable;
     
    public class NavigationItem {
        private String mText;
        private Drawable mDrawable;
        private String mUrl;
     
        public NavigationItem(String text, Drawable drawable, String url) {
            mText = text;
            mDrawable = drawable;
            mUrl = url;
        }
     
        public String getText() {
            return mText;
        }
     
        public void setText(String text) {
            mText = text;
        }
        public String getUrl() {
            return mUrl;
        }
     
        public void setUrl(String url) {
            mUrl = url;
        }
     
        public Drawable getDrawable() {
            return mDrawable;
        }
     
        public void setDrawable(Drawable drawable) {
            mDrawable = drawable;
        }
     
    }
    Un des fragments :
    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
    import android.app.Fragment;
    import android.content.Context;
    import android.net.ConnectivityManager;
    import android.net.NetworkInfo;
    import android.os.Bundle;
    import android.support.annotation.Nullable;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.webkit.WebView;
    import android.widget.Toast;
     
     
    public class menu1_Fragment extends Fragment {
        View rootview;
        @Nullable
        @Override
     
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            rootview = inflater.inflate(R.layout.xml1, container, false);
     
            ConnectivityManager connMgr = (ConnectivityManager) getActivity()
                    .getSystemService(Context.CONNECTIVITY_SERVICE);
     
            NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
     
            if (networkInfo != null && networkInfo.isConnected()) {
                WebView WebView = (WebView) rootview.findViewById(R.id.xml1);
                WebView.getSettings().setJavaScriptEnabled(true);
                WebView.loadUrl("www.foo.bar");
            }
            else
            {
                Toast.makeText(rootview.getContext(), "Vous devez avoir une connexion internet.", Toast.LENGTH_SHORT).show();
            }
     
            return rootview;
        }
     
    }
    As-tu besoin des xml ?

  13. #13
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Points : 5 072
    Points
    5 072
    Par défaut
    Il faudrait tes codes modifiés avec l'ajout de l'information dans le Bundle, pour te dire ce qui foire.

    Intuitivement, je dirai que tu crées un Bundle, mais que tu ne l'associes pas au Fragment. Sans le code modifié, il est très difficile de t'aiguiller correctement.
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 83
    Points : 51
    Points
    51
    Par défaut
    ok,

    Donc pour le MainActivity ça donne :
    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    import android.app.Fragment;
    import android.app.FragmentManager;
    import android.content.Intent;
    import android.graphics.BitmapFactory;
    import android.os.Bundle;
    import android.provider.ContactsContract;
    import android.support.v4.widget.DrawerLayout;
    import android.support.v7.app.ActionBarActivity;
    import android.support.v7.widget.Toolbar;
    import android.view.Menu;
     
     
    public class MainActivity extends ActionBarActivity
            implements NavigationDrawerCallbacks {
     
        /**
         * Fragment managing the behaviors, interactions and presentation of the navigation drawer.
         */
        private NavigationDrawerFragment mNavigationDrawerFragment;
        private Toolbar mToolbar;
     
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            mToolbar = (Toolbar) findViewById(R.id.toolbar_actionbar);
            setSupportActionBar(mToolbar);
     
            mNavigationDrawerFragment = (NavigationDrawerFragment)
                    getFragmentManager().findFragmentById(R.id.fragment_drawer);
     
            // Set up the drawer.
            mNavigationDrawerFragment.setup(R.id.fragment_drawer, (DrawerLayout) findViewById(R.id.drawer), mToolbar);
     
        }
     
        @Override
        public void onNavigationDrawerItemSelected(int position) {
            Fragment objFragment = null;
    Bundle args= new Bundle();
     
    switch (position) {
        case 0:
            objFragment = new fragment();
            args.putString("url", "www.foo.bar");
            break;
                case 1:
                    objFragment = new menu2_Fragment();
                    break;
                case 2:
                    objFragment = new menu3_Fragment();
                    break;
                case 3:
                    objFragment = new menu4_Fragment();
                    break;
                case 4:
                    objFragment = new menu5_Fragment();
                    break;
                case 5:
                    objFragment = new menu6_Fragment();
                    break;
                case 6:
                    objFragment = new menu8_Fragment();
                    break;
                case 7:
                    objFragment = new menu9_Fragment();
                    break;
                case 8:
                    objFragment = new menu7_Fragment();
                    break;
            }
     
            FragmentManager fragmentManager = getFragmentManager();
            fragmentManager.beginTransaction()
                    .replace(R.id.container, objFragment)
                    .commit();
        }
     
     
        @Override
        public void onBackPressed() {
            if (mNavigationDrawerFragment.isDrawerOpen())
                mNavigationDrawerFragment.closeDrawer();
            else
                super.onBackPressed();
        }
     
     
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            if (!mNavigationDrawerFragment.isDrawerOpen()) {
                // Only show items in the action bar relevant to this screen
                // if the drawer is not showing. Otherwise, let the drawer
                // decide what to show in the action bar.
                getMenuInflater().inflate(R.menu.main, menu);
                return true;
            }
            return super.onCreateOptionsMenu(menu);
        }
     
     
     
     
        /*@Override
        public boolean onOptionsItemSelected(MenuItem item) {
            int id = item.getItemId();
            return super.onOptionsItemSelected(item);
        }*/
     
     
    }
    Et le fragment :
    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
    import android.app.Fragment;
    import android.content.Context;
    import android.net.ConnectivityManager;
    import android.net.NetworkInfo;
    import android.os.Bundle;
    import android.support.annotation.Nullable;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.webkit.WebView;
    import android.widget.Toast;
     
    public class fragment extends Fragment {
        View rootview;
        @Nullable
        @Override
     
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            rootview = inflater.inflate(R.layout.xml1, container, false);
     
    Bundle args = getArguments();
    Toast.makeText(getActivity(), "plop" + args , Toast.LENGTH_LONG).show();
     
            return rootview;
        }
     
    }

  15. #15
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    ok... je vois la création de "fragment" (pas très explicite comme nom de classe d'ailleurs, au passage les types en Java commencent traditionellement par une majuscule).
    Mais pas le passage des "args" vers le fragment.

    D'autre part, je ne vois pas les menu2_fragment etc...
    J'avais cru comprendre que c'était tout la même classe ? (un webview) avec juste l'url qui changeait ?
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 83
    Points : 51
    Points
    51
    Par défaut
    En effet au final il ne doit y avoir que deux fragments (au lieu de 9 comme c'est le cas là), pour tester je n'ai changé que sur le premier fragment (en plus au final le code que j'ai mis dans le fragment ne sera pas du tout comme ça étant donné que là je cherche à afficher une string dans un toast le temps de comprendre comment ça marche tandis qu'au final je veux récupérer une string et la placer dans un webView).


    ps : je t'avoue que quand je bricole comme ça, je ne me prends jamais la tête (à tort je sais) avec les conventions comme leCamelCase, en général quand tout fonctionne, je reprends mes codes pour les commenter et refaire la "mise en page".

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 83
    Points : 51
    Points
    51
    Par défaut
    Petit up !

Discussions similaires

  1. [AJAX] Changer l'url de la page sans rafraichir la page
    Par bonjour69 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 29/11/2006, 09h56
  2. Changer l'URL d'un WebBrowser
    Par advandced dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 16/11/2006, 09h28
  3. pas changer l'url ds la barre d'adresse
    Par lepierre dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 27/02/2006, 17h31
  4. [Struts] changer l'url affiché apres un forward
    Par mauvais_karma dans le forum Struts 1
    Réponses: 5
    Dernier message: 31/08/2005, 13h31

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