0

Je suis novice dans Android et j'apprends le menu contextuel, mais après avoir surfé sur le menu contextuel j'ai peu de confusion dans Adaptateur et Inflater. J'ai vu 1 programme avec l'utilisation de l'adaptateur et 1 utilisant Inflater. Alors, aidez-moi s'il vous plaît comment/quand utiliser Adapter et Inflater.quand utiliser l'adaptateur et quand utiliser inflater

Voici un exemple en utilisant gonfleur ...

public class MainActivity extends ListActivity { 

    private String selectedName = ""; 
    private String[] nameList; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     nameList = getResources().getStringArray(R.array.name_list); 

     setListAdapter(new ArrayAdapter<String>(this, 
       android.R.layout.simple_list_item_1, nameList)); 

     registerForContextMenu(getListView()); 

    } 

    public void onCreateContextMenu(ContextMenu menu, View v, 
      ContextMenuInfo menuInfo) { 
     getMenuInflater().inflate(R.menu.context_menu, menu); 
    } 

    public boolean onContextItemSelected(MenuItem item) { 

     AdapterContextMenuInfo adapInfo = (AdapterContextMenuInfo) item 
       .getMenuInfo(); 
     selectedName = nameList[(int) adapInfo.id]; 

     switch (item.getItemId()) { 
     case R.id.view: 
      Toast.makeText(MainActivity.this, 
        "You have pressed View Context Menu for " + selectedName, 
        Toast.LENGTH_LONG).show(); 
      return true; 
     case R.id.save: 
      Toast.makeText(MainActivity.this, 
        "You have pressed Save Context Menu for " + selectedName, 
        Toast.LENGTH_LONG).show(); 
      return true; 
     case R.id.edit: 
      Toast.makeText(MainActivity.this, 
        "You have pressed Edit Context Menu for " + selectedName, 
        Toast.LENGTH_LONG).show(); 
      return true; 
     case R.id.delete: 
      Toast.makeText(MainActivity.this, 
        "You have pressed Delete Context Menu for " + selectedName, 
        Toast.LENGTH_LONG).show(); 
      return true; 
     } 
     return false; 
    } 
} 

Un autre exemple en utilisant l'adaptateur:

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    Countries = getResources().getStringArray(R.array.Game); 
    ListView list = (ListView) findViewById(R.id.list); 
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
      R.layout.listitem, Countries); 
    list.setAdapter(adapter); 
    registerForContextMenu(list); 
} 

public void onCreateContextMenu(ContextMenu menu, View v, 
     ContextMenuInfo menuInfo) { 
    if (v.getId() == R.id.list) { 
     AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo; 
     menu.setHeaderTitle(Countries[info.position]); 
     String[] menuItems = getResources().getStringArray(
       R.array.contextmenu); 
     for (int i = 0; i < menuItems.length; i++) { 
      menu.add(Menu.NONE, i, i, menuItems[i]); 
     } 
    } 
} 

public boolean onContextItemSelected(MenuItem item) { 
    // TODO Auto-generated method stub 
    AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item 
      .getMenuInfo(); 
    int menuItemIndex = item.getItemId(); 

    String[] menuItems = getResources().getStringArray(R.array.contextmenu); 
    String[] menuItems1 = getResources().getStringArray(R.array.game); 
    String menuItemName = menuItems[menuItemIndex]; 
    String listItemName = menuItems1[info.position]; 
    // selectedName = nameList[(int) info.id]; 

    TextView text = (TextView) findViewById(R.id.textView1); 
    text.setText(String.format("Selected %s for item %s", menuItemName, 
      listItemName)); 
    return true; 
} 

Répondre

0

Ces types servent à des fins différentes.

Le MenuInflator convertit les fichiers XML en un objet Menu représentant la disposition à l'écran du menu. Dans le premier exemple, R.menu.context_menu fait référence à un fichier XML associé au res/menu/context_menu.xml qui définit les choix qui apparaîtront dans le menu. Voir Menu Resource pour le format des ressources du menu XML. Voici un exemple simple:

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:id="@+id/open" android:title="Open"/> 
    <item android:id="@+id/info" android:title="More Info"/> 
    <item android:id="@+id/delete" android:title="Delete"/> 
</menu> 

Le AdapterContextMenuInfo fournit des informations supplémentaires lorsqu'un menu contextuel est élevé pour une liste, grille, etc. Il vous permet de déterminer quel élément l'utilisateur sélectionné (à long pressée). Notez que vos deux exemples l'utilisent.

+0

.Merci beaucoup pour votre réponse. Mais j'ai ça. à ce sujet, Dans les deux exemples de méthode oncreatecontextmenu(), 1 utiliser l'adaptateur et 1 utiliser inflater. Alors, quel est le meilleur à utiliser à la fois et pourquoi? Et désolé pour votre désagrément..en fait j'ai oublié d'ajouter quelques lignes de code. Mais maintenant j'ai ajouté .. – makjal

+0

@makjal Vous devriez [utiliser des fichiers de ressources XML] (http://stackoverflow.com/a/11960645/687315) pour mise en page comme le premier exemple plutôt que de générer des objets directement avec du code Java. – user113215

Questions connexes