0

Je crée un menu contextuel de façon dynamique, où les éléments seront renseignés à partir du service Web.Comment accéder au tableau List <> dans la classe java activity de la classe BaseAdapter

La situation est, l'analyse a été dans le MainActivity.java, mais le menu contextuel est à l'intérieur de la classe BaseAdapter.java. J'ajoute tous les éléments de menu dans un tableau à l'intérieur du MainActivity.java .Veuillez consulter le code ci-dessous:

try { 
     JSONArray jsonArray = new JSONArray(menuItemsResponse.toString()); 
     for (int i = 0; i < jsonArray.length(); i++){ 
     JSONObject object = jsonArray.getJSONObject(i); 
     String strMenuItemNames = object.getString("Name"); 

     listMenuItems.add(strMenuItemNames); 
       } 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

Je suis d'ajouter des articles à l'intérieur List<String> listMenuItems avec listMenuItems.add(strMenuItemNames).

Maintenant, je veux accéder à cette listMenuitems à partir de la classe BaseAdapter. Voici mon code pour le menu Pop à l'intérieur getView() méthode en classe BaseAdapter:

PopupMenu popupMenu = new PopupMenu(activity, imgDropDown); 
popupMenu.getMenu().add() // array to be added here 


popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener({ 
    // on click events for each item 
}); 

Toute personne avec des solutions s'il vous plaît répondre.

Merci d'avance!

+0

Il existe une méthode appelée getItem (position int) que vous pouvez retourner à cette même instance et appelée adapter.getItem (). –

Répondre

0

1. Ajoutez les informations de liste que vous devez utiliser dans la méthode de construction.

List<String> listMenuItems; 
public MyAdapter(List<String> listMenuItems, Context context) { 
    ... 
} 

2.Utiliser dans votre code.

popupMenu.getMenu().add(listMenuItems.get(position)); 

Essayez ceci.

public class MyAdapter extends BaseAdapter { 

    List<String> listMenuItems; 
    private LayoutInflater inflater; 
    private Context context; 

    public MyAdapter(List<String> listMenuItems, Context context) { 
     this.context = context; 
     this.listMenuItems = listMenuItems; 
     this.inflater = LayoutInflater.from(context); 
    } 

    ... 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View view = inflater.inflate(R.layout.your_layout, null); 
     ... 

     PopupMenu popupMenu = new PopupMenu(activity, imgDropDown); 
     // edited here 
     popupMenu.getMenu().add(listMenuItems.get(position)); // array to be added here 
     popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener({ 
       // on click events for each item 
     }); 
     return view; 
    } 
} 
+0

cela n'a pas fonctionné .. –

+0

Vous pouvez essayer la réponse de @GRK. – KeLiuyue

0

Vous pouvez définir une interface comme ci-dessous

interface MenuItemProvider { 
    getMenuItems(); // add parameters, returntype based on your need. 
} 

activité implémente cette interface et met en œuvre la méthode de getMenuItems() en retournant les listItems qui sont préparés dans l'activité. Maintenant, votre adaptateur doit avoir une méthode de réglage pour définir cette interface comme ci-dessous.

class yourActivity extends <> implements MenuItemProvider { 

// other implementation. 

// pass this implementation to your base adapter. 
baseadapterinstance.setMenuItemProvider(this); 


getMenuItems(){ 
// return list items. 
} 



    } 


/*** BaseAdpater class. ***/ 
private MenuItemProvider menuItemProviderImpl; 

void setMenuItemProvider(MenuItemProvider menuItemProviderImpl){ 
this. menuItemProviderImpl = menuItemProviderImpl; 
} 

// when you need to get the list, call 
menuItemProviderImpl.getMenuItems(); 

Espérons que cela aide !!