comment ajouter personnalisé, mise en page de Arrayadapter?
Je suis en train de créer un ListView
avec mise en page personnalisée. chaque élément de la listView
devrait ressembler comme indiqué dans le item.xml
posté ci-dessous.
dans le code, j'ai utilisé
adapter = new ArrayAdapter<T>(getApplicationContext(), R.layout.listi_tems_layout, topicsList);
mais il ne fonctionne pas parce que le constructeur de la ArrayAdapter<T>
accepte la deuxième paramètre comme int
quelque chose comme
android.R.layout.simple_list_item_1
et dans mon cas, c'est la mise en page personnalisée qui est
R.layout.listi_tems_layout
quelle carte dois-je utiliser ou comment résoudre ce problème. grâce
Élément:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:weightSum="3">
<TextView
android:id="@+id/tvlist_topic"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"/>
<ImageView
android:id="@+id/ivList_delete"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:clickable="true"
android:src="@drawable/delete_icon"
android:contentDescription="icon to delete item from the Listview"
android:layout_weight="1"/>
<CheckBox
android:id="@+id/cbList_hook"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:checked="false"
android:layout_weight="1"/>
mainlayout:
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="${relativePackage}.${activityClass}" >
....
....
....
<ListView
android:id="@+id/lvEco_topics"
android:layout_width="match_parent"
android:layout_height="470dp"
android:layout_below="@id/tvEco_topic"
android:layout_marginTop="30dp"
android:scrollbars="vertical"
android:divider="@android:drawable/alert_light_frame"></ListView>
<Button
android:id="@+id/btEco_save"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/lvEco_topics"
android:gravity="center"
android:text="Save"/>
code:
public class MainActivity extends Activity {
private ArrayList<String> topicsList;
private ListAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);
topicsList = new ArrayList<String>();
topicsList.add("topic1");
topicsList.add("topic2");
topicsList.add("topic3");
topicsList.add("topic4");
topicsList.add("topic5");
topicsList.add("topic6");
adapter = new ArrayAdapter<T>(getApplicationContext(), R.layout.listi_tems_layout, topicsList);
ce problème à l'aide de
le problème que je reçois est de 2 le constructeur n'est pas défini"
j'ai essayé ta suggestion, mais je reçois un warnin dit 2Type de sécurité: Le constructeur ArrayAdapter(Contexte, int, List) appartient à la crue de type ArrayAdapter. Références de type générique ArrayAdapter<T> doit être paramétrée"
créer adaptateur
adapter = new ArrayAdapter<T>(getApplicationContext(), R.layout.listi_tems_layout, topicsList);
?le problème que je reçois est de 2 le constructeur n'est pas défini"
j'ai essayé ta suggestion, mais je reçois un warnin dit 2Type de sécurité: Le constructeur ArrayAdapter(Contexte, int, List) appartient à la crue de type ArrayAdapter. Références de type générique ArrayAdapter<T> doit être paramétrée"
créer adaptateur
ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this, R.layout.listi_tems_layout, topicsList);
et voir ma réponse pour les autres changements
OriginalL'auteur rmaik | 2015-01-28
Vous devez vous connecter pour publier un commentaire.
Lorsqu'il n'est pas personnalisation
getView
méthode deArrayAdapter
puis mise en page personnalisée nécessitent un TextView avecandroid:id="@android:id/text1"
id et montrer la valeur dans un TextView.Pour exécuter l'application avec le code actuel, ajouter
android:id="@android:id/text1"
pourTextView
dansR.layout.listi_tems_layout
mise en page.Parce que
R.layout.listi_tems_layout
mise en page contient d'autres points de vue aussi avec TextView afin de personnaliser la Carte en étendant ArrayAdapter classe pour accéder à d'autres points de vue également.Voir l'exemple suivant:Personnalisé ArrayAdapter pour une ListView (Android)
utilisation
extends ArrayAdapter<String>
est-ce parce que la liste de tableaux que j'ai se compose de Chaînes de caractères?
oui, vous avez raison
En fait, le code peut être tout ce que vous voulez. La seule exigence pour la mise en page personnalisée est de n'avoir qu'un TextView à l'intérieur.
OriginalL'auteur ρяσѕρєя K
créer une classe et s'étend avec l'adaptateur de base de ce genre et puis définissez cet adaptateur
Peu importe, vous pouvez accéder à cet élément à votre liste de tableaux personnalisés avec la position.
Encore une mauvaise pratique.
Alors quelle est la bonne pratique.?
retour clientArrayList.get(position); bien sûr ... Vous devez aussi protéger contre null liste dans le constructeur
OriginalL'auteur Gopal Singh Sirvi
Comme je vous comprends. On cherche à faire la mise en page personnalisée dans ArrayAdapter. Il n'est pas possible. Yout besoin d'écrire votre propre coutume adaptateur extension arrayAdapter classe permet de définir la façon de traiter avec votre mise en page personnalisée à l'aide de votre topicsList. Quelque chose comme ceci:
Passage de l'Activité à la carte est une mauvaise idée, tant que l'adaptateur peut fuir ensemble de son activité.
OriginalL'auteur Karol Żygłowicz
Je ne sais pas si c'est toujours d'actualité,
à partir de la source ArrayAdapter semblent avoir constructeur qui accepte textview des ressources en 3e paramètre, vous ne savez pas si il s'avance nouvellement ajouté en 2017 :D,
et de la source, si vous n'avez pas à fournir textview disposition id, il va supposer que le point de vue est un textview, donc je pense qu'il est possible d'utiliser la vue personnalisée sans extension/création de la nouvelle carte (je sais, j'ai hate d'en créer un moi-même), mais vous devez fournir textview utilisée pour le texte
OriginalL'auteur user5962153
Veuillez créer votre propre ItemAdapter qui s'étend ArrayAdapter<>.
Et de charger votre item.xml dans MainActivity onCreate()
OriginalL'auteur ChihWei