2010-11-15 3 views
4

La réponse à cette question pourrait être vraiment évidente mais elle me donne un mal de tête. J'ai un LinearLayout simple avec un seul ListView dedans. Je fais ceci: onCreateregisterForContextMenu ne pas appeler correctement - qu'est-ce que je fais mal?

public void onCreate(Bundle b) { 
     super.onCreate(b); 
     setContentView(R.layout.friends); 
     ListView listView = (ListView) findViewById(R.id.friend_list); 
     listAdapter = new CheckinListAdapter(checkins, listView, R.layout.checkin_list_item); 
     listView.setAdapter(listAdapter); 

     if (getLastNonConfigurationInstance() != null) { 
      FriendsActivity last = (FriendsActivity) getLastNonConfigurationInstance(); 
      this.checkins.addAll(last.checkins); 
      this.sort = last.sort; 
     } else { 
      refresh(); 
     } 
     registerForContextMenu(listView); 
    } 

Mais pour une raison quelconque onCreateContextMenu ne sera jamais appelé! J'ai donc fait quelques recherches et comme je charge la liste après le registre, peut-être que ça ne l'enregistre pas correctement. Si je vais dans mon ListAdapter et que je fais registerForContextMenu, cela apparaît. Mais il ne se comporte pas correctement avec le clavier. Donc, je suis maintenant confus sur ce qui peut être l'erreur, car il semble un peu non intuitif pour moi d'avoir à enregistrer chaque élément enfant. Tous les exemples que je trouve en ligne utilisent ArrayAdapter. ? :(

Toutes les suggestions

Modifier

Voici plus en détail, dans le cas où il quelque chose que je ne vois pas:

Mon fichier XML

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:orientation="vertical" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent"> 

    <Button android:text="@string/check_in" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:onClick="onCheckInClicked"/> 

    <ListView android:id="@+id/friend_list" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent"/> 
</LinearLayout> 

Article de liste xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:paddingTop="5dip" 
     android:paddingBottom="5dip"> 
    <ImageView android:id="@+id/user_photo" 
       android:layout_width="40dip" 
       android:layout_height="40dip" 
       android:scaleType="centerCrop"/> 

    <LinearLayout android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:orientation="vertical" 
        android:layout_marginLeft="8dip"> 
     <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content"> 
      <Button android:id="@+id/user" style="@style/TextButton"/> 

      <TextView android:text="@string/at" 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content"/> 

      <Button android:id="@+id/venue" 
        android:singleLine="true" 
        android:ellipsize="end" 
        style="@style/TextButton"/> 

     </LinearLayout> 

     <TextView android:id="@+id/venue_address" style="@style/GreyLarge"/> 

     <LinearLayout android:id="@+id/checkin_detail" 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:layout_marginTop="6dip" 
         android:layout_marginBottom="6dip"> 

      <ImageView android:id="@+id/checkin_image" 
         android:layout_width="70dip" 
         android:layout_height="60dip" 
         android:layout_marginRight="8dip" 
         android:scaleType="centerCrop"/> 

      <TextView android:id="@+id/checkin_shout" 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content"/> 

     </LinearLayout> 

     <TextView android:id="@+id/elapsedTime" style="@style/GreySmall"/> 
    </LinearLayout> 
</LinearLayout> 

Répondre

13

Cela m'a pris 6 heures pour comprendre, mais il se trouve que je devais ajouter:

android:focusable="false" 

à tous mes <Button/> tags.

poste connexe: TextView and Button in each row and onListItemClick()

+0

Dans mon cas, l'élément de liste avait une case à cocher. Le menu contextuel ne fonctionnait pas au départ, mais il fonctionnait une fois que je mettais l'accent sur false pour la case à cocher. – mvsagar

0

Do, registerForContextMenu (listView); avant de configurer l'adaptateur, c'est-à-dire avant:

listView.setAdapter (listAdapter);

Vous avez mentionné que le menu ne répondait pas correctement aux actions du clavier. Pouvez-vous me dire quel est exactement le problème?

+0

Salut Swathi - je me suis déplacé registerForContextMenu juste après findViewById() et je ne vois toujours rien qui se passe. Ce que je voulais dire avant était en utilisant la molette de défilement je ne suis pas en mesure d'obtenir le menu contextuel ouvert. Mais en utilisant la souris, je peux cliquer et maintenir pour ouvrir. Ceci est l'exemple que j'ai utilisé https://github.com/mikeplate/ListViewDemo –

+1

Salut Amir, Comme je sais, le menu contextuel sera affiché lorsque nous effectuons un appui long sur une vue.Ce lien peut vous aider - http: // developer.android.com/guide/topics/ui/menus.html –

Questions connexes