2014-09-16 4 views
-2

Je souhaite ajouter des lignes différentes à un ListView. En première rangée je veux montrer un textView. En deuxième deux imagesViews et troisième ligne Single TextView. Puis une liste de texte avec l'icône. Je sais que c'est possible en utilisant CustomAdapter personnalisé. Mais ne pas comprendre comment procéder.
Mon CustomAdapter:Création de CustomAdapter pour listView avec différentes dispositions de lignes

 public class CustomList extends ArrayAdapter<String> 
{ 
private final Activity context; 
private final String[] web; 
private final Integer[] imageId; 

public CustomList(Activity context, 
     String[] web, Integer[] imageId) { 
    super(context, R.layout.drawer_list_item, web); 
    this.context = context; 
    this.web = web; 
    this.imageId = imageId; 
    } 
    @Override 
    public View getView(int position, View view, ViewGroup parent) { 
    LayoutInflater inflater = context.getLayoutInflater(); 

    View rowView= inflater.inflate(R.layout.drawer_list_item, null, true); 
    TextView txtTitle = (TextView) rowView.findViewById(R.id.text1); 
    ImageView imageView = (ImageView) rowView.findViewById(R.id.drawer_imgIcom); 
    txtTitle.setText(web[position]); 
    imageView.setImageResource(imageId[position]); 

    return rowView; 
    } 
+0

Y a-t-il un google? http://www.survivingwithandroid.com/2014/08/android-listview-with-multiple-row.html – 2Dee

+0

J'ai googlé. Mais couldent comprendre comment passer une ligne différente à la classe de l'adaptateur. Fondamentalement ne pas comprendre comment utiliser la classe customAdapter écrite. – user2686960

+1

Voyez-vous le problème avec une telle question ici? Il existe de nombreux tutoriels détaillés sur le sujet, donc si vous ne mettez pas l'accent sur ce qui cause vos problèmes, comment pourrions-nous vous fournir une réponse plus complète que ce qui est déjà disponible avec une simple recherche google? Une meilleure question serait: J'ai essayé de le faire [votre code] mais cela ne fonctionne pas pour moi parce que je m'attends à [résultat] et je reçois [erreur stacktrace/autre résultat]. – 2Dee

Répondre

0

Dans votre fichier xml drawer_list_item créer tous les éléments dont vous avez besoin, du texte, des images, etc., positionnés comme vous le souhaitez. Ensuite, dans le getView() après le gonflement, masquer et afficher ces éléments comme vous le souhaitez en fonction de la position. N'oubliez pas de masquer et d'afficher, car Android réutilisera les vues.

Vous devriez également envisager d'utiliser viewHolder car cela améliorera les performances.

+0

et comment vais-je passer les détails de vue pour chaque roi de ligne à la classe Adapter. mon code pour ajouter un type de vue. Adaptateur CustomList = new \t \t CustomList (MainActivity.this, catégories, category_images); \t mDrawerList = (ListView) findViewById (R.id.left_drawer); – user2686960

+0

Créer une liste de membres dans l'adaptateur: private ArrayList mList; Créer un constructeur CustomList comme ceci: CustomList publique (contexte de contexte, fragment Fragment, ArrayList objets) { MLIST = articles; } Ensuite, dans votre getView, vous pouvez faire mList.get (position) Ceci est juste un exemple brut rapide. Pour un exemple complet, faites un rapide google pour quelques exemples d'adaptateur listview. – James

0

essayer ce code dans GetView(),

@Override 
public View getView(int position, View view, ViewGroup parent) { 
LayoutInflater inflater = context.getLayoutInflater(); 

View rowView= inflater.inflate(R.layout.drawer_list_item, null, true); 
TextView txtTitle = (TextView) rowView.findViewById(R.id.text1); 
ImageView imageView = (ImageView) rowView.findViewById(R.id.drawer_imgIcom); 
ImageView imageView1 = (ImageView) rowView.findViewById(R.id.drawer_imgIcom1); 

if(position == 0) 
{ 
    txtTitle.setText(web[position]); 
    imageView.setvisibility(View.GONE); 
    imageView1..setvisibility(View.GONE); 
} 
else if(Position == 1){ 
txtTitle.setText(web[position]); 
imageView.setvisibility(View.Visible); 
imageView1..setvisibility(View.Visible); 
imageView.setImageResource(imageId[position]); 
imageView1.setImageResource(imageId1[position]); 

}else 
{ 
txtTitle.setText(web[position]); 
imageView.setvisibility(View.GONE); 
imageView1..setvisibility(View.GONE); 
} 

return rowView;} 

et des vues correspondant utiliser dans vos mises en page XML.

+0

merci prakash. mais en réglant l'adaptateur à listView, je passe deux catégories de tableaux et category_array qui contiennent chacun 7 éléments. CustomList adapter = new \t CustomList (MainActivity.this, catégories, category_images); Comment vais-je configurer l'adaptateur pour ce cas. – user2686960

+0

nous ne connaissons pas vos concepts, nous vous aidons simplement, comprenons votre logique. – prakash

0

Vous devez d'abord votre vue personnalisée (il contient les vues que vous avez besoin pour votre but)

exemple:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <ImageView 
     android:id="@+id/photo" 
     android:layout_width="match_parent" 
     android:layout_height="170dp" 
     android:background="@android:color/holo_blue_light" 
     android:contentDescription="@string/cd_pr_photo" 
     android:scaleType="centerCrop" /> 

    <!--Invisible divider so we can put our views just in the 
    right place :) --> 
    <View 
     android:id="@+id/divider" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_below="@id/photo" /> 

    <TextView 
     android:id="@+id/title" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_above="@id/divider" 
     android:layout_margin="10dp" 
     android:text="@string/sample_title" 
     android:textColor="@android:color/white" 
     android:textSize="20sp" 
     android:textStyle="bold|italic" /> 

    <ImageButton 
     android:id="@+id/share" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_above="@id/divider" 
     android:layout_alignParentEnd="true" 
     android:layout_alignParentRight="true" 
     android:layout_margin="10dp" 
     android:background="@android:drawable/ic_menu_share" 
     android:contentDescription="@string/cd_the_sharebutton" /> 

</RelativeLayout> 

Une fois que vous avez décidé de votre mise en page vous étendez ArrayAdapter dans votre CustomAdapterClass.

Exemple:

@Override 
    public View getView(int position, View v, ViewGroup parent) { 

     //In case we don't have an inflated view, inflate. 
     if (v == null) { 
      v = View.inflate(getContext(), R.layout.custom_puertorico_layout, null); 
     } 

     //The domain object with data. 
     PuertoRico p = getItem(position); 


     //Photo of Puerto Rico 
     final ImageView photo = (ImageView) v.findViewById(R.id.photo); 
     photo.setImageDrawable(p.getPicture()); 

     //Given Title 
     TextView title = (TextView) v.findViewById(R.id.title); 
     title.setText(p.getTitle()); 

     //Extra stuff... 
     ImageButton share = (ImageButton) v.findViewById(R.id.share); 



     return v; 
    } 

Facile exemple et le code complet peut être trouvé à https://github.com/JRSosa/PRPics

Hope it helps.

Questions connexes