0

Je souhaite afficher une liste ou un type de menu dans le tiroir de navigation lors de l'exécution. J'ai une seule activité dans laquelle je mets des fragments en utilisant la mise en page de cadre. Ce fragment contient Webview. Chaque fois que l'utilisateur clique sur l'élément de navigation, Webview ouvre son autre lien. Je avec succès reçu réponse de Retrofit 2.3, mais maintenant je ne sais pas comment atteindre cet objectifcomment afficher la barre de navigation pour ouvrir le lien sur le fragment

  public void onResponse(Call<List<NavBarResult>> call, Response<List<NavBarResult>> response) { 
       List<Result> result = response.body(); 
//what to do here ? 
      } 
      @Override 
      public void onFailure(Call<List<NavBarResult>> call, Throwable t) { 
//error messages here 
      } 

Mon JSON look API comme:

[ 
{ 
menulist_id: "1", 
mname: "Item 1", 
mlink: "http://example.com/technology/", 
}, 
{ 
menulist_id: "2", 
mname: "Item 2", 
mlink: "http://example.com/sports/", 
} 
] 

Je veux travailler comme que les éléments de menus fonctionnent tous automatiquement même si nous changeons les données de l'API. Merci d'avance.

Répondre

1

Copie possible.

Android - Add bottom navigation view dynamically

How can I add a menu dynamically to bottom navigation view?

Vous pouvez obtenir dynamiquement le menu de votre écran de navigation, puis ajouter un nouvel élément de menu avec vous la réponse JSON.

Dans votre OnNavigationItemSelectedListener, vous pouvez modifier l'URL de votre webview.

EDIT 1

Peut-être que j'ai mal compris quelque chose. Voulez-vous remplir une barre de navigation avec votre réponse JSON? Dans ce cas, mes liens ci-dessus peuvent vous aider.

Voulez-vous remplir un tiroir de navigation avec votre réponse JSON? Dans ce cas, vous devriez commencer à lire ceci: https://developer.android.com/training/implementing-navigation/nav-drawer.html

Modifier votre mise en page d'activité:

<android.support.v4.widget.DrawerLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/drawer_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <!-- The main content view --> 
    <FrameLayout 
     android:id="@+id/content_frame" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 
    <!-- The navigation drawer --> 
    <ListView android:id="@+id/left_drawer" 
     android:layout_width="240dp" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     android:choiceMode="singleChoice" 
     android:divider="@android:color/transparent" 
     android:dividerHeight="0dp" 
     android:background="#111"/> 
</android.support.v4.widget.DrawerLayout> 
  • content_frame contiendra votre fragment avec une WebView.
  • left_drawer contiendra vos liens dynamiques.

Obtenez le left_drawer:

mDrawerList = (ListView) findViewById(R.id.left_drawer); 

Lorsque vous obtenez votre réponse JSON vient de mettre un adaptateur à votre mDrawerList:

public void onResponse(Call<List<NavBarResult>> call, Response<List<NavBarResult>> response) { 
    // result is a private List<Result> attribute of the class. 
    result = response.body(); 

    // Set the adapter for the list view 
    mDrawerList.setAdapter(new ArrayAdapter<Result>(this, 
    android.R.layout.simple_list_item_1, result)); 

    // Set the list's click listener 
    mDrawerList.setOnItemClickListener(new DrawerItemClickListener()); 
} 

De cette façon, votre mise en page du tiroir sera rempli avec votre JSON réponse dynamique.

Ensuite, il vous suffit de définir votre OnItemClickListener pour appeler un nouveau fragment lorsque vous cliquez sur un élément de votre liste.

private class DrawerItemClickListener implements ListView.OnItemClickListener { 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
     selectItem(position); 
    } 
} 

MyFragment n'est pas développ ici, mais il contiendrait une webView et attendre une ARG_LINK qui devrait être une URL à afficher dans son webView.

private void selectItem(int position) { 
    // Create a new fragment and specify the link to show based on position 
    Fragment fragment = new MyFragment(); 
    Bundle args = new Bundle(); 
    args.putString(MyFragment.ARG_LINK, result.get(position).getUrl()); 
    fragment.setArguments(args); 

    // Insert the fragment by replacing any existing fragment 
    FragmentManager fragmentManager = getFragmentManager(); 
    fragmentManager.beginTransaction() 
        .replace(R.id.content_frame, fragment) 
        .commit(); 

    // Highlight the selected item and close the drawer 
    mDrawerList.setItemChecked(position, true); 
    mDrawerLayout.closeDrawer(mDrawerList); 
} 

J'espère que cela vous aidera cette fois!

0

Vous pouvez ajouter une vue de navigation dans votre tiroir de navigation puis, lorsque vous recevez les éléments de l'API, vous pouvez ajouter des éléments au menu voir ci-dessous le code pour ajouter les éléments du menu.

final Menu menu = navigationView.getMenu(); 
//Here you should add the length of your json array instead 'i' . 
for (int i = 1; i <= 3; i++) { 
    menu.add("Runtime item "+ i); 
}