3

Le problème que j'ai eu ici est que les 2 boutons de l'élément de liste xml semblent interférer avec le ContextMenu dans l'activité principale, l'empêchant de gonfler quand une liste l'article est longuement pressé. Juste comme une note, les boutons eux-mêmes fonctionnent bien. Lorsque je les ai supprimés, le ContextMenu fonctionne parfaitement.Android: Boutons dans le contrôle composé interférer avec ConViewMenu de ListView

L'élément de la liste xml:

<com.anna.mytallykeeper.views.TallyItemView 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent"> 
<TextView android:id="@+id/item_description" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:gravity="center_horizontal" 
    android:textSize="40px" 
    android:textColor="@color/dijon" /> 
<RelativeLayout 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"> 
    <Button android:id="@+id/decrement_button" 
     android:layout_width="80px" 
     android:layout_height="80px" 
     android:layout_centerVertical="true" 
     android:background="@drawable/minus_button_1" /> 
    <Button android:id="@+id/increment_button" 
     android:layout_width="80px" 
     android:layout_height="80px" 
     android:layout_centerVertical="true" 
     android:layout_alignParentRight="true" 
     android:background="@drawable/add_button_1" /> 
    <TextView android:id="@+id/item_count" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerVertical="true" 
     android:layout_toLeftOf="@id/increment_button" 
     android:layout_toRightOf="@id/decrement_button" 
     android:gravity="center_horizontal" 
     android:textSize="80px" 
     android:textColor="@color/dijon" /> 
</RelativeLayout> 
</com.anna.mytallykeeper.views.TallyItemView> 

main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="@color/piplup"> 
    <ListView android:id="@android:id/list" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" /> 
</LinearLayout> 

de l'activité principale (hérite de ListActivity):

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    app = (MyTallyKeeperApplication) getApplication(); 
    adapter = new TallyItemListAdapter(this, app.getTallyItems()); 
    setListAdapter(adapter); 
    Utility.logI((getListView() == null ? 
      "ListView is null" : "ListView is not null")); 
    Utility.logI((getListView().getId() == 
      android.R.id.list ? "ListView ID is correct" :"ListView ID is not correct")); 
    registerForContextMenu(getListView()); 
} 
// 
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo)  
{ 
    Utility.logI(MyTallyKeeperMain.class.getSimpleName() + ".onCreateContextMenu"); 
    super.onCreateContextMenu(menu, v, menuInfo); 

    if (v.getId() == android.R.id.list) { 
     getMenuInflater().inflate(R.menu.item_menu, menu); 
    } 
} 

de la classe d'adaptation de la liste (hérite des paramètres à partir de BaseAdapter):

public View getView(int position, View view, ViewGroup parent) { 
    TallyItemView tiv; 
    if (view == null) { 
     tiv = (TallyItemView)View.inflate(context, R.layout.tally_item_row, null); 
    } else { 
     tiv = (TallyItemView)view; 
    } 
    tiv.setTallyItem(tallyItems.get(position)); 
    tiv.getDecrementButton().setOnClickListener(new DecrementListener(position)); 
    tiv.getIncrementButton().setOnClickListener(new IncrementListener(position)); 

    return tiv; 
} 
+0

signifie que vous voulez ouvrir le menu contextuel sur un clic de bouton? –

+0

sur long-appuyant sur l'article de liste – MissPiplup

Répondre

3

J'ai finalement trouvé comment résoudre le problème avec les boutons interférant avec le ContextMenu: définissez l'attribut focusable de chaque bouton sur false.

<Button android:id="@+id/increment_button" 
     android:layout_width="80px" 
     android:layout_height="80px" 
     android:layout_centerVertical="true" 
     android:layout_alignParentRight="true" 
     android:focusable="false" 
     android:background="@drawable/add_button_1" /> 
0

Je l'ai fait avec vue sur la liste onclick

public void onItemClick(AdapterView<?> view, View arg1, int arg2, 
        long id) { 

       openContextMenu(arg1); 

et clic long

registerForContextMenu(list); 

pour plus de détails http://groups.google.com/group/android-developers/browse_thread/thread/fe5691bf03af949c

vous remercie.

+0

J'ai juste essayé de le faire, mais pas de chance. Le problème avec mon application, je pense, est que chaque ListItem contient des boutons. – MissPiplup

+0

poster votre code adaptateur alors puis-je vous aider –

+0

J'ai enfin compris ce qui n'allait pas avec elle. Merci pour le conseil quand même. – MissPiplup

Questions connexes