8

Estoy intentando crear una aplicación para tabletas que tiene una pantalla principal con tres fragmentos, cada uno con una lista. Me gustaría habilitar los menús contextuales para cada lista, pero cada vez que intento obtener un programa inesperado, pare y fuerce el cierre.Menú de contexto de un ListFragment

siguiente es el código XML y relevante que funciona y me da mis tres fragmentos deseados con listviews en cada uno, antes de tratar y añadir el menú contextual:

main.xml

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

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

<fragment class="cdc.ListFragment.Fragment1" 
    android:id="@+id/fragment1" 
    android:layout_width="0dp" 
    android:layout_height="match_parent" 
    android:layout_weight="1" /> 

<fragment class="cdc.ListFragment.Fragment2" 
    android:id="@+id/fragment2" 
    android:layout_width="0dp" 
    android:layout_height="match_parent" 
    android:layout_weight="1" /> 

<fragment class="cdc.ListFragment.Fragment3" 
    android:id="@+id/fragment3" 
    android:layout_width="0dp" 
    android:layout_height="match_parent" 
    android:layout_weight="1" /> 

</LinearLayout> 

fragment1. xml (los otros dos son similares)

<TextView 
     android:id="@+id/txtHeader1" 
     android:layout_width="fill_parent" 
     android:layout_height="30dp" 
     android:layout_gravity="center" 
     android:gravity="center" 
     android:text="@string/machines_header" 
     android:textColor="#00ccff" 
     android:background="#ff23cf" 
     android:textSize="25dp" /> 

    <ListView 
     android:id="@id/android:list" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1" 
     android:drawSelectorOnTop="false" 
     android:textSize="12dp" /> 

    <Button 
     android:id="@+id/Button01" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:minHeight="25dp" 
     android:text="@string/menu_add_machine" 
     android:textSize="15dp" > 
    </Button> 

</LinearLayout> 

ListFragment.java

import android.app.Activity; 
import android.os.Bundle; 

public class ListFragmentExampleActivity extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
    } 
} 

Fragment1.java (los otros dos son similares)

import android.app.ListFragment; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.Toast; 

public class Fragment1 extends ListFragment { 
    String[] presidents = { "Dwight D. Eisenhower", "John F. Kennedy", 
      "Lyndon B. Johnson", "Richard Nixon", "Gerald Ford", 
      "Jimmy Carter", "Ronald Reagan", "George H. W. Bush", 
      "Bill Clinton", "George W. Bush", "Barack Obama" }; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     return inflater.inflate(R.layout.fragment1, container, false); 
    } 

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

     setListAdapter(new ArrayAdapter<String>(getActivity(), 
       android.R.layout.simple_list_item_1, presidents)); 
    } 

} 

De acuerdo con todo lo que he leído, yo debería ser capaz de simplemente añadir
registerForContextMenu(getListView());
al método onCreate en fragment1. java y agrega el código de menú apropiado. Sin embargo, en el momento en que lo agregue y trate de ejecutarlo, obtengo el bloqueo/bloqueo antes mencionado.

¿Alguien tiene alguna sugerencia/ayuda para esta situación?

Respuesta

34

Mover

registerForContextMenu(getListView()); 

a

public void onActivityCreated(Bundle savedState) { 

y debe solucionar el problema.

+0

Wow ... así de simple. :) ¡Gracias! – Barak

Cuestiones relacionadas