2012-07-21 6 views
1

Je souhaite placer un menu contextuel dans une liste. Cela semble très simple à faire mais j'ai un comportement intéressant. La listview a deux champs, un textview et un editText. La pression longue ouvre le menu sur l'EditText mais nulle part ailleurs sur la liste. Voici les morceaux de code.Menu contextuel android listview

public class ManageClass extends ListActivity { 

super.onCreate(savedInstanceState); 
    setContentView(R.layout.manageclass); 

     //Tons of not relevant stuff that I would be happy to provide. 
        pfdata = new PortfolioData(this); 
      try { 
     Cursor cursor = getClasses(); 
     showClasses(cursor); 

    } finally { 
     pfdata.close(); 
    } 
} 

    private Cursor getClasses() { 

    String sql = "select c._id, c.NAME as NAME , c.percentage as PERCENTAGE " 
      + "from asset_classes c;"; 

    SQLiteDatabase db = pfdata.getReadableDatabase(); 

    Cursor cursor = db.rawQuery(sql, null); 
    startManagingCursor(cursor); 
    return cursor; 

} 

private void showClasses(Cursor cursor) { 

    adapter = new MySimpleCursorAdapter(this, R.layout.classrow, cursor, 
      FROM, TO, t); 

    // Log.d("TEST", Integer.toString(adapter.getCount())); 

    setListAdapter(adapter); 
    adapter.notifyDataSetChanged(); 
       //I've tried moving this line around but it hasn't made a difference. 
    registerForContextMenu(getListView()); 
} 

@Override 
public void onCreateContextMenu(ContextMenu menu, View v, 
    ContextMenuInfo menuInfo) { 


     menu.add(Menu.NONE, 0, 0, "A"); 
     menu.add(Menu.NONE, 1, 1, "B"); 
     menu.add(Menu.NONE, 2, 2, "C"); 

} 

Enfin, la mise en page elle-même que je l'avoue est trop compliqué

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

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

    <TextView 
     android:id="@+id/editText1" 
     android:layout_width="300px" 
     android:layout_height="wrap_content" 
     android:text="@string/TCLabel" /> 

    <TextView 
     android:id="@+id/classtotalpercentage" 
     android:layout_width="109dp" 
     android:layout_height="wrap_content" 
     android:textSize="50px" /> 
</LinearLayout> 

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

    <TextView 
     android:id="@+id/AddClassLabel" 
     android:layout_width="200px" 
     android:layout_height="wrap_content" 
     android:layout_weight="0.38" 
     android:text="@string/AddClassLabel" /> 

    <Button 
     android:id="@+id/addclass_button" 
     android:layout_width="120dp" 
     android:layout_height="wrap_content" 
     android:text="@string/addclassbutton_label" /> 
</LinearLayout> 

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:background="@color/grey" 
    android:orientation="horizontal" 
    android:padding="10sp" > 

    <TextView 
     android:id="@+id/assetclassHeader" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/assetclassHeader" 
     android:width="200dp" /> 

    <TextView 
     android:id="@+id/percentageHeader" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_toRightOf="@id/assetclassHeader" 
     android:text="@string/percentageHeader" 
     android:width="100dp" /> 
</LinearLayout> 

<RelativeLayout 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

    <ListView 
     android:id="@android:id/list" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:fadeScrollbars="false" 
     android:scrollbarAlwaysDrawVerticalTrack="true" 
     android:scrollbarStyle="outsideOverlay" 
     android:scrollbars="vertical" /> 

    <TextView 
     android:id="@android:id/empty" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/no_list_data" /> 
</RelativeLayout> 

</LinearLayout> 

Je vous remercie des conseils. Je voudrais le menu sur le textview et pas l'edittext, si possible.

Une mise à jour. J'ai trouvé que cela avait quelque chose à voir avec EditText. Si je le change en vue de texte ou si je le supprime complètement, alors tout fonctionne comme il se doit.

Répondre

5

J'ai eu un problème similaire avec les cases à cocher et j'ai trouvé que le problème était dû au fait que la case à cocher était active. J'ai changé l'attribue à: android: focusable = "false"

et cela fonctionne maintenant correctement.

+0

J'apprécie votre aide. J'ai déjà changé toute mon approche de cet écran, donc je ne peux pas réellement vérifier qu'il prendrait soin de ce que je voyais. – Clavijo

+0

J'ai eu le même problème avec HorizontalScrollView dans l'élément List; Votre réponse m'a aidé. Je vous remercie. – vivek

Questions connexes