2012-04-27 4 views
1

J'ai une classe qui agrandit une liste. Je dois avoir onitemclicklistener sur cette liste. Le code suivant ne fonctionne pas. Je veux dire que l'écoute sur clic ne fonctionne pas. Comment résoudre ceci?comment définir onitemclicklistener sur un listview

listview.xml

<ListView 
android:id="@android:id/list" 
android:layout_width="match_parent" 
android:layout_height="fill_parent" 
android:layout_marginBottom="47dip" 
android:layout_marginTop="47dip" > 
</ListView> 

elements.xml

<RelativeLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="match_parent" 
     android:layout_height="46dp" 
     android:gravity="center" > 

     <ToggleButton 
      android:id="@+id/toggleButton1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentRight="true" 
      android:layout_alignParentTop="true" 
      android:text="ToggleButton" 
      android:textOff="Inactive" 
      android:textOn="Active" /> 

     <TextView 
      android:id="@+id/label_note" 
      android:layout_width="wrap_content" 
      android:layout_height="30dp" 
      android:layout_centerVertical="true" 
      android:layout_marginRight="38dp" 
      android:layout_marginLeft="2dip" 
      android:layout_toRightOf="@+id/check_note" 
      android:text="@+id/label" 
      android:textSize="25px" /> 

     <CheckBox 
      android:id="@+id/check_note" 
      android:layout_width="30dip" 
      android:layout_height="30dip" 
      android:layout_alignParentLeft="true" 
      android:layout_centerVertical="true" 
      android:visibility="gone" 
      android:button="@drawable/customdrawablecheckbox" /> 

    </RelativeLayout> 

List.java

public class List extends ListActivity{ 
.... 

public void onCreate(Bundle icicle) { 

     this.setContentView(R.layout.listview); 
     super.onCreate(icicle); 



} 
ArrayAdapter<ListModel> adapter = new InteractiveArrayAdapter(
       this, getModel(), false); 
     setListAdapter(adapter); 

     final ListView list1 = getListView(); 
     list1.setItemsCanFocus(true); 
     list1.setOnItemClickListener(new OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> adapterView, View view, int pos, long l) { 
       // TODO Auto-generated method stub 
      // HashMap<String, String> o = (HashMap<String, String>) list1.getItemAtPosition(pos);     
       Toast.makeText(ContactsNoteList.this, "ID '" +list.get(pos).getName()+" "+list.get(pos).getId().toString() + "' was clicked.", Toast.LENGTH_LONG).show(); 

      } 

     }); 

..} 

    private List<ListModel> getModel() { 


    for (int i=0;i<3;i++)  
list.add(get("Elem"+i.toString(),i); 
      } 
     } 

     return list; 
    } 

    private ListModel get(String s1,int Id) { 
     return new ListModel(s1,Id); 
    } 

InteractiveArrayAdapter.java

InteractiveArrayAdapter extends 
     ArrayAdapter<ListModel> { 

    private final List<ListModel> list; 
    private final Activity context; 
    private boolean visibility; 
    public InteractiveArrayAdapter(Activity context, List<ListModel> list,boolean visibility) { 
     super(context, R.layout.elements, list); 
     this.context = context; 
     this.list = list; 
     this.visibility=visibility; 

    } 


    static class ViewHolder { 
     protected TextView text; 
     protected CheckBox checkbox; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View view = null; 
     if (convertView == null) { 
      LayoutInflater inflator = context.getLayoutInflater(); 
      view = inflator.inflate(R.layout.elements, null); 


      final ViewHolder viewHolder = new ViewHolder(); 
      viewHolder.text = (TextView) view.findViewById(R.id.label_note); 
      viewHolder.checkbox = (CheckBox) view.findViewById(R.id.check_note); 
      viewHolder.checkbox 
        .setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 



@Override 
public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) { 
           ListModel element = (ListModel) viewHolder.checkbox.getTag(); 
           element.setSelected(buttonView.isChecked()); 

          } 
         }); 
      view.setTag(viewHolder); 
      viewHolder.checkbox.setTag(list.get(position)); 
     } else { 
      view = convertView; 
      ((ViewHolder) view.getTag()).checkbox.setTag(list.get(position)); 
     } 

     ViewHolder holder = (ViewHolder) view.getTag(); 
     holder.text.setText(list.get(position).getName()); 
     holder.checkbox.setChecked(list.get(position).isSelected()); 
     if (visibility==true) 
     holder.checkbox.setVisibility(View.VISIBLE); 
     else 
      holder.checkbox.setVisibility(View.INVISIBLE); 
     return view; 
    } 
} 

Besoin d'aide. THX. Appréciez

Répondre

2

Utilisation:

view.setOnClickListener(new OnClickListener() {   
      @Override 
      public void onClick(View v) {... 
        Toast.makeText(context,"you clicked item: "+position,Toast.Lenght_LONG).show(); 
        //code you want to execute on click of list item... 
      } 
    }); 
    return view; 

dans votre classe d'adaptateur.

EDIT exemple de code a changé ...

+0

pourriez-vous s'il vous plaît substituer mon exemple? – user1222905

+0

thx. Ça marche. Dans mon cas, je veux retourner le texte de la liste et l'id. comment écrire ça? Besoin d'aide pour. thx – user1222905

+0

hey! bon ça marche pour toi. Si cela fonctionne, vous devez "accepter" la réponse – Pallavi

2

Vous devez remplacer onListItemClick() méthode de ListActivity classe

@Override 
protected void onListItemClick(ListView l, View v, int position, long id) { 
//Your code goes here..  
} 
+0

pourriez-vous s'il vous plaît réécrire mon code? – user1222905

-1

mis en onCreate() ..

ListView mListView = getListView(); 
mListView .setOnItemClickListener(new OnItemClickListener() { 

    public void onItemClick(AdapterView<?> parent, View view, int position, 
      long id) { 
     // TODO Auto-generated method stub 

    } 

}); 
+0

Je l'ai mis sur la méthode de création. Regardez dans mon code – user1222905

+0

ne fonctionne pas. – user1222905

Questions connexes