2016-04-16 7 views
1

Ich bin neu bei Android Dev und ich versuche, eine Kontaktliste, eine Liste mit einem Bild auf der linken Seite und den Namen des Kontakts zu erstellen.ViewHolder zum Erstellen von Kontaktliste mit benutzerdefinierten Adapter

Also ich folgte einem Tutorial und schrieb diesen Code, der nichts anzeigt, haben Sie eine Ahnung von was es kommen könnte?

MainActivity.java:

public class MainActivity extends Activity { 
ListView list; 

private ArrayList<Contact> List = new ArrayList<Contact>(); 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    Contact Nico = new Contact("nico",R.drawable.smileyhappy); 
    Contact Sev = new Contact("Sev",R.drawable.smileyveryhappy); 


    List.add(Nico); 
    List.add(Sev); 


    CustomList adapter = new CustomList(MainActivity.this,List); 
    list=(ListView)findViewById(R.id.list); 
    list.setAdapter(adapter); 
    list.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, 
           int position, long id) { 
      Toast.makeText(MainActivity.this, "You Clicked at " + List.get(+position).toString(), Toast.LENGTH_SHORT).show(); 

     } 
    }); 

} 

} 

CustomList.java

public class CustomList extends BaseAdapter{ 

LayoutInflater mInflater; 
Activity Context; 
ArrayList<Contact> contactList = null; 

public CustomList(Activity context, ArrayList<Contact> contactList) { 
    this.Context=context; 
    this.contactList = contactList; 
} 

static class ViewHolder { 
    public TextView mNom; 
    public ImageView mPhoto; 
} 


@Override 
public int getCount() { 
    return 0; 
} 

@Override 
public Object getItem(int position) { 
    return null; 
} 

@Override 
public long getItemId(int position) { 
    return 0; 
} 

public View getView(int r, View convertView, ViewGroup parent) { 
    ViewHolder holder ; 
    // Si la vue n'est pas recyclée 
    if(convertView == null) { 
     // On récupère le layout 
     LayoutInflater mInflater = Context.getLayoutInflater(); 
     convertView = mInflater.inflate(R.layout.list_single, null); 

     holder = new ViewHolder(); 
     // On place les widgets de notre layout dans le holder 
     holder.mNom = (TextView) convertView.findViewById(R.id.txt); 
     holder.mPhoto = (ImageView) convertView.findViewById(R.id.img); 

     // puis on insère le holder en tant que tag dans le layout 
     convertView.setTag(holder); 
    } else { 
     // Si on recycle la vue, on récupère son holder en tag 
     holder = (ViewHolder)convertView.getTag(); 
    } 

    // Dans tous les cas, on récupère le contact téléphonique concerné 
    Contact c = (Contact)getItem(r); 
    // Si cet élément existe vraiment… 
    if(c != null) { 
     System.out.println("coucou"); 
     // On place dans le holder les informations sur le contact 
     holder.mNom.setText(c.getNom()); 
     holder.mPhoto.setImageResource(c.getImageId()); 
    } 
    return convertView; 
} 

} 

Contact.java

public class Contact { 

String nom; 
int ImageId; 

public Contact(String nom, int imageId) { 
    this.nom = nom; 
    ImageId = imageId; 
} 


public String getNom() { 
    return nom; 
} 

public int getImageId() { 
    return ImageId; 
} 

public void setNom(String nom) { 
    this.nom = nom; 
} 

public void setImageId(int imageId) { 
    ImageId = imageId; 
} 
} 

list_single.xml

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" > 
<RelativeLayout> 
    <ImageView 
     android:id="@+id/img" 
     android:layout_width="50dp" 
     android:layout_height="50dp"/> 

    <TextView 
     android:id="@+id/txt" 
     android:layout_toRightOf="@id/img" 
     android:layout_width="wrap_content" 
     android:layout_height="50dp" /> 

</RelativeLayout> 
</TableLayout> 

Antwort

0

Da im getView Ihres Adapters, sind Sie mit der Funktion getItem, müssen Sie es codieren.

ersetzen

@Override 
public Object getItem(int position) { 
    return null; 
} 

mit diesem:

@Override 
public Object getItem(int position) { 
    if (contactList == null) { 
    return null; 
    } 
    if (contactList.size() <= position) { 
    return null; 
    } 
    return (contactList.get(position)); 
} 

Auch die getCount Funktion wie folgt ausführen:

@Override 
public int getCount() { 
    return (contactList == null ? 0 : contactList.size()); 
} 

Hoffnung, das hilft!

+0

Es funktioniert, Danke! –

+0

Gut zu wissen. Guten Mut :) – NSimon

Verwandte Themen