2016-04-16 153 views
1

我是新來的Android開發人員,我試圖創建一個聯繫人列表,左側的圖片和聯繫人的名稱列表。ViewHolder創建與自定義適配器的聯繫人列表

所以我跟着一個教程,寫了這段代碼,它沒有顯示任何東西,你有什麼想法它可能來自哪裏?

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> 

回答

0

由於在適配器的getView,您使用的功能getItem,你需要編寫它。

更換

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

與此:

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

而且完成getCount將功能如下:

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

希望幫助!

+0

它的工作原理,謝謝! –

+0

很高興知道。 Bon勇氣:) – NSimon

相關問題