2016-04-07 1 views
0

J'ai développé ma première application Android ces derniers jours, en utilisant ce guide: Material Design Guide de Google.Fragment de tuile, comment obtenir un contenu différent dans différentes tuiles?

J'ai décidé d'opter pour les fragments de carreaux, mais le problème est que le contenu de ces carreaux est statique/le contenu de la tuile 1 est le même que dans les carreaux 2, 3, 4 et ainsi de suite. Comment puis-je changer cela pour que chaque tuile ait un contenu unique?

Toute aide serait grandement appréciée!

Répondre

0

Normalement, vous auriez des données que vous souhaitez présenter dans ce format de liste en mosaïque. Cela devrait normalement être passé dans ContentAdapter afin que vous puissiez l'utiliser pour remplir chaque tuile. À la minute tout le contenu est en train d'être défini en XML, pas dans votre adaptateur.

Si vous voulez changer les images pour chaque vous devez ajouter un attribut id à la disposition item_tile:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="?android:attr/selectableItemBackground" 
    android:padding="@dimen/tile_padding"> 

    <ImageView 
     !--Add the id for the ImageView--> 
     android:id="@+id/tile_image" 
     android:layout_width="match_parent" 
     android:layout_height="@dimen/tile_height" 
     android:scaleType="centerCrop" 
     android:src="@drawable/paris" /> 

    ... 
</RelativeLayout> 

Ensuite, vous devez changer la classe ViewHolder dans le TileContentFragment afin que nous puissions mettre la main sur la ImageView et TextView dans la disposition item_tile.

public static class ViewHolder extends RecyclerView.ViewHolder { 

    ImageView tileImage; 
    TextView tileTitle; 

    public ViewHolder(View itemView) { 
     super(itemView); 
     this.tileImage = (ImageView) itemView.findViewById(R.id.tile_image); 
     this.tileTitle = (TextView) itemView.findViewById(R.id.tile_title); 
    } 
} 

Ensuite, il suffit à titre d'exemple permet de définir le titre de chaque carreau à "Bonjour":

public static class ContentAdapter extends RecyclerView.Adapter<ViewHolder> { 

    Other class methods... 

    @Override 
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_tile, parent, false); 
     return new ViewHolder(view); 
    } 

    @Override 
    public void onBindViewHolder(ViewHolder holder, int position) { 
     holder.tileTitle.setText("Hello"); 
     //If you had images for the different tile you could set them here too 
     //holder.tileImage.setImageResource([THE ID OF YOUR IMAGE HERE]) 
    } 
} 

Hope this helps.

+0

Merci! Je vais essayer et rapporter quand je l'ai fait –

+0

QUESTION # 1: "TextView tileText" n'est pas dans "public static class ViewHolder .." censé être "TextView tileTitle", comme il est dans "tileTitle" = (TextView) tileItem.findViewById ... "dans" public ViewHolder (LayoutInflater ..) ci-dessous? /// J'ai également eu quelques erreurs lors de l'exécution de l'application: ERROR # 1: Dans "public ViewHolder() { erreur: le constructeur ViewHolder de la classe ViewHolder ne peut pas être appliqué à des types donnés; nécessaire: Voir trouvé: aucun argument raison: listes d'arguments réels et formels diffèrent de longueur « //// ERREUR # 2: Toujours dans » ViewHolder publique() { « erreur: appel à super doit être première déclaration dans le constructeur " –

+0

Oui vous avez raison sur le nom de la variable, je le faisais dans le navigateur donc il y avait une chance pour les erreurs! –