L'ajout dynamique de de ligne personnalisée à la liste
En se référant cela, j'ai créé suivantes:
main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<Button
android:id="@+id/addBtn"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:onClick="addItems"
android:text="Add New Item" />
<ListView
android:id="@+id/list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:drawSelectorOnTop="false" />
</LinearLayout>
MainActivity.java
public class MainActivity extends Activity {
ListView list;
ArrayList<String> listItems = new ArrayList<String>();
ArrayAdapter<String> adapter;
int clickCounter = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
list = (ListView) findViewById(R.id.list);
adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, listItems);
list.setAdapter(adapter);
list.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
String item = list.getItemAtPosition(position).toString();
Log.i("MainActivity", "Selected = " + item);
}
});
}
public void addItems(View v) {
listItems.add("Clicked : " + clickCounter++);
adapter.notifyDataSetChanged();
}
}
Et il fonctionne parfaitement. Mais selon les exigences, chaque mon listview ligne ne sera pas seulement une chaîne unique. Au lieu de cela, il sera collection de vues composé de imageview et textviews stockées dans row.xml.
Maintenant mes questions sont:
-
Ce qui va remplacer
adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, listItems);
? Il seraadapter = new ArrayAdapter<String>(this,R.layout.row, listItems);
?? -
Comment puis-je consulter imageview et textviews de chaque ligne? Comment puis-je définir et récupérer des données à partir d'eux? Comment puis-je reconnaître leurs événements de clic?
-
Est l'utilisation de
Adapter
doit? ou puis-je sortir avec elle?
Toute aide appréciée.
OriginalL'auteur GAMA | 2013-06-06
Vous devez vous connecter pour publier un commentaire.
=> La ListView vous êtes l'affichage est l'utilisation normale de l'adaptateur. Si vous souhaitez que votre article contient plusieurs vues comme Imageview, Textview, ou opinion, alors vous devez définir classe Personnalisée par l'extension soit
BaseAdapter
ouArrayAdapter
.=> Ici ArrayAdapter ne fonctionnera pas parce que votre ligne xml de mise en page peut contenir des différents points de vue comme ImageView, TextView, le Bouton ou tout autre widget. Donc, je vous suggère de définir votre propre adaptateur classe où vous devez remplacer les
getView()
méthode.=> Comme je l'ai dit ci-dessus, une fois que vous définissez classe personnalisée, vous devrez remplacer getView() la méthode où vous pouvez trouver toutes les vues de votre ligne xml fichier de mise en page, de référence et de définir/afficher toutes les données que vous voulez.
=> Oui sa doit, sans adaptateur, vous ne serez pas en mesure d'afficher des données-lié widgets comme GridView, ListView, Spinner, Galerie, etc.
Exemple pour la définition de la coutume adaptateur:
OriginalL'auteur Paresh Mayani
Ce sont les étapes de base:
android.R.layout.simple_list_item_1
dans votre exemple, si vous recherchez dans la source Android est juste une mise en page avec un seul TextView.Maintenant pour répondre à vos questions:
Lorsque vous étendez BaseAdapter vous permettra de mettre en œuvre la méthode
public View getView (int position, View convertView, ViewGroup parent)
. Dans cette méthode, vous devez gonfler votre ligne personnalisée de mise en page pour créer la vue. Ensuite, trouver le ImageView et TextView à l'aide de la méthode findViewById. Lorsque vous avez l'ImageView et TextView vous appelez setText ou setImageSource à l'ensemble de vos données et setOnClickListener pour les événements click.OriginalL'auteur jfs
Voici le code de mon projet
Examiner votre liste de deux champ de texte et un ImageView comme suit "row.xml" fichier. Le copier dans votre dossier res
Créer de la classe suivante dans votre activité pour stocker ces données
//Faire la suite en tant que membres de la classe
//Initialiser dans la Méthode onCreate
Definitition de ArrayAdapter
Maintenant pour ajouter n'importe quel élément de votre liste à faire à la suite
OriginalL'auteur Shakti Malik