2010-10-11 6 views
0

J'ajoute un listview via Java dans @ + id/View01. Pour une raison quelconque, les éléments de la vue de liste n'acceptent pas les clics. Est-ce que quelqu'un a des idées sur les causes possibles?La vue Android n'accepte pas les clics

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:orientation="vertical" 
    android:layout_height="fill_parent" 
    android:background="@color/light_blue" 
    > 
    <Button android:text="@+id/Button01" 
     android:id="@+id/Button01" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceLarge"/> 
    <AbsoluteLayout 
    android:id="@+id/Layout01" 
    android:layout_width="fill_parent" 
    android:orientation="vertical" 
    android:layout_below="@+id/Button01"   
    android:layout_above="@+id/Button02" 
    android:layout_height="fill_parent"> 

     <View android:id="@+id/View01" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:gravity="center_horizontal" 
     /> 
     <ListView android:id="@+id/ListView02" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:gravity="center_horizontal"/> 
    </AbsoluteLayout> 
    <Button android:text="@+id/Button02" 
     android:id="@+id/Button02" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:textAppearance="?android:attr/textAppearanceLarge"/> 
</RelativeLayout> 

Si je change mon code à ce qui suit les clics de travail, mais la mise en page ne regarde pas la façon dont je veux .:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:orientation="vertical" 
    android:layout_height="fill_parent" 
    android:background="@color/light_blue" 
    > 
    <Button android:text="@+id/Button01" 
     android:id="@+id/Button01" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceLarge"/> 

    <View android:id="@+id/View01" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/Button01" 
     android:gravity="center_horizontal" 
     /> 
    <ListView android:id="@+id/ListView02" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/View01" 
     android:gravity="center_horizontal" 
     android:layout_above="@+id/Button02"/> 
    <Button android:text="@+id/Button02" 
     android:id="@+id/Button02" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:textAppearance="?android:attr/textAppearanceLarge"/> 
</RelativeLayout> 

L'une des fonctions impliquées:

protected void initiateExtraView(FillInput fillInput){ 
    View extraView = fillInput.getExtraView(); 
    ViewGroup parent = (ViewGroup) extraView.getParent(); 
    int index = parent.indexOfChild(extraView); 
    parent.removeView(extraView); 
    extraView = fillInput.getLayoutInflater().inflate(
      R.layout.extrabuttonlistview, 
      parent, 
      false); 

    parent.addView(extraView, index); 
    fillInput.setExtraView(extraView); 

    ListView extraButtonView = (ListView) extraView; 
    fillInput.setExtraButtonListView(extraButtonView); 

    ListAdapter adapter = new ExtraButtonAdapter(fillInput, this); 
    fillInput.getExtraButtonListView().setAdapter(adapter);  
} 

La fonction dans l'ExtraButtonAdapter qui crée la vue particulière qui n'accepte pas les clics:

private View getNewForm(int position, View convertView, 
     ViewGroup parent) { 
    View view = mInflater.inflate(
      R.layout.new_form_button, 
      parent, 
      false); 

    View.OnClickListener listener = new View.OnClickListener() { 
     public void onClick(View v) { 

      Log.i(TAG, "Click on NewForm"); 
     } 
    }; 
    view.setOnClickListener(listener); 

    setNewFormView(view); 
    return view; 
} 

R.layout.extrabuttonlistview:

<?xml version="1.0" encoding="UTF-8"?> 
    <ListView android:id="@+id/ListView01" 
    xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:clickable="true" 
     android:gravity="center_horizontal" 
     android:layout_above="@+id/Button02"/> 
+0

Avez-vous défini 'ListView.setOnItemClickListener'? – Tseng

+0

Comment savez-vous qu'il n'accepte pas les clics? Pouvez-vous envoyer votre code? Est-ce que vous définissez l'écouteur de clic? – Asahi

+0

Mon code est assez complexe avec ne permet pas de tout poster. J'ai défini un OnClickListener pour la vue. – Christian

Répondre

0

Par ListView par défaut ne passe pas les événements tactiles par un enfant à moins qu'il ne peut accepter le focus. Vous pouvez modifier ce comportement en appelant setItemsCanFocus(true). Le comportement par défaut de ListView traite les éléments en tant qu'unités uniques et répartit les événements de clic en utilisant un OnItemClickListener attaché à ListView lui-même.

+0

L'appel de setItemsCanFocus (true) ne change rien. Cela n'expliquerait pas non plus pourquoi le second code fonctionne quand le premier ne fonctionne pas. Lorsque j'ajoute un OnItemClickListener à ListView, il ne reçoit aucun clic. – Christian

0

Avez-vous déjà essayé de remplacer le <View android:id="@+id/View01" avec un

<ViewStub android:id="@+id/listViewStub" android:inflateId="@+id/View01" android:layout="@layout/layout/new_form_button" /> 

et code pourrait gonfler par

ViewStub stub = (ViewStub)findViewById(R.id.listViewStub); 
stub.inflate(); 

Semble bizarre que vous essayez d'ajouter un ListView dans un élément de vue.

L'avantage de gonfler avec ViewStub est que, une fois gonflé, l'élément "ViewStub" sera complètement remplacé par votre ListView, puis sera égal à votre ListView02 et réduira votre profondeur de Hiérarchie de un.

ViewStub Documentation

modifier: Peut-être ViewGroup est plus approprié alors.

+0

Je veux être en mesure de mettre des choses différentes dans la vue sur l'exécution. Autant que je peux voir un ViewStub ne peut pas changer son contenu après qu'il ait été gonflé. – Christian

+0

Essayez peut-être 'ViewGroup' à la place.La classe de vue semble être la mauvaise classe pour y ajouter d'autres vues. – Tseng

Questions connexes