2012-03-16 1 views
2

Je conçois une application simple à partir de tutoriels que j'ai vus, et j'essaye d'afficher simplement deux vues de texte dans chaque rangée d'une liste, un nom et un prix. Cela a fonctionné et j'ai pu sélectionner la ligne et cela activerait une intention. Cependant, j'ai ensuite changé mon code xml pour que la listview soit placée dans un linearLayout afin que je puisse avoir un en-tête en haut de l'écran. Maintenant, quand je clique sur l'une des lignes, elles sont mises en surbrillance, mais rien d'autre ne se passe. J'ai déjà essayé de rendre les textviews à clickable = false dans le xml mais toujours pas de chance. J'espère juste manquer quelque chose de simple dans la méthode onCreate. `ViewMenuListing public class étend ListActivity {ListView dans LinearLayout ne réagit plus à OnclickListener

public static final String ROW_ID = "row_id"; // Intent extra key 
private ListView contactListView; // the ListActivity's ListView 
private CursorAdapter contactAdapter; // adapter for ListView 
private String tableName; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    contactListView = getListView(); // get the built-in ListView 
    contactListView.setOnItemClickListener(viewContactListener); 

    setContentView(R.layout.viewmenu); 

    //Get table name of menu clicked. 
    Bundle extras = getIntent().getExtras(); 
    tableName = extras.getString("table"); 

    // map each contact's name to a TextView in the ListView layout 
    String[] from = new String[] { "name", "price" }; 
    int[] to = new int[] { R.id.itemTextView, R.id.priceTextView }; 
    //int[] to = new int[] { R.id.itemTextView}; 

    contactAdapter = new SimpleCursorAdapter(
      ViewMenuListing.this, R.layout.menu_list_item, null, from, to); 
    setListAdapter(contactAdapter); // set contactView's adapter 
}` 

La seule chose que j'ai changé dans ce code est que je l'setContentView (R.layout.viewmenu) maintenant, quand je na pas avant et la liste serait juste le point de vue du contenu.

Voici mon fichier ViewMenu:

`

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 
    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/hello" /> 
    <ListView 
     android:id="@+id/android:list" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content"/> 
</LinearLayout>` 

et mon menu_list_item.xml

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

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/itemTextView" 
     android:padding="8dp" 
     android:clickable = "false" 
     android:textSize="20sp" android:textColor="@android:color/white" 
     android:minHeight="?android:attr/listPreferredItemHeight" 
     android:gravity="center_vertical"> 
    </TextView> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/priceTextView" 
     android:clickable = "false" 
     android:textColor="@android:color/white"/> 
</LinearLayout> 

Merci pour votre aide!

+0

Donc, fondamentalement, lorsque vous supprimez LinearLayout parent (sans rien modifier d'autre) cela fonctionne? Aussi pourquoi utilisez-vous une ListActivity lorsque vous définissez un ListView distinct – Soham

+0

oui, quand je commente le setContentView cela fonctionne. Et honnêtement, je suivais un tutoriel. Je suppose que c'était une mauvaise chose à cela! –

Répondre

2

On dirait que vous définissez explicitement un onItemClickListener pour votre ListView. Ce n'est vraiment pas nécessaire puisque vous étendez ListActivity et ListActivity a une méthode que vous pouvez remplacer appelée onListItemClick(). Je remplacer la méthode onListItemClick() au lieu de définir explicitement un onItemClickListener. http://developer.android.com/reference/android/app/ListActivity.html#onListItemClick(android.widget.ListView, android.view.View, int, long)

+0

puis-je simplement placer tout ce que j'ai dans mon onItemClickListener dans le override onListItemClick()? Désolé un débutant ici. –

+0

Oui, c'est correct. Assurez-vous d'étendre ListActivity et NOT Activity. –

+0

Cela a fait le travail! Merci beaucoup! –

0

S'il vous plaît corriger les choses suivantes

contactListView = getListView(); and setListAdapter(contactAdapter); 

La syntaxe ci-dessus peut être utilisée que si votre classe étend ListActivity .Dans votre cas, vous étendez l'activité, donc au-dessus de l'approche ne fonctionnera pas.

Votre menu_list_item.xml me semble très bien. dans le fichier viewmenu.xml font la correction suivante tout en spécifiant id pour listview.

<ListView 
    android:id="@+id/list" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"/> 

Veuillez vous reporter à ce code corrigé.

public class SampleActivity extends ListActivity 
{ 
    public static final String ROW_ID = "row_id"; // Intent extra key 
    private ListView contactListView; // the ListActivity's ListView 
    private CursorAdapter contactAdapter; // adapter for ListView 
    private String tableName; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     contactListView = (ListView) findViewById(R.id.list); // get the 
                   // built-in 
                   // ListView 
     contactListView.setOnItemClickListener(this); 

     setContentView(R.layout.viewmenu); 

     Bundle extras = getIntent().getExtras(); 
     tableName = extras.getString("table"); 

     // map each contact's name to a TextView in the ListView layout 
     String[] from = new String[] 
     { "name", "price" }; 
     int[] to = new int[] 
     { R.id.itemTextView, R.id.priceTextView }; 

     contactAdapter = new SimpleCursorAdapter(SampleActivity.this, 
       R.layout.menu_list_item, null, from, to); 
     contactListView.setAdapter(contactAdapter); 
    } 

    @Override 
    public void onListItemClick(AdapterView<?> adapterView, View view, 
      int position, long arg3) 
    { 

    } 
} 

Maintenant, dans la méthode onListItemClick, vous pouvez écrire la logique de votre choix.

Espérons cette aide.

+0

Merci d'avoir pris le temps de répondre et il est très utile que les gens écrivent le code pour montrer la solution. Cependant la solution d'Alex Fu a fonctionné avant que je voyais ceci. Merci encore! –

+0

Vous êtes les bienvenus :) –

Questions connexes