Android ListView et ArrayAdapter / Arraylist

Krath:

Je suis complètement nouveau sur Java / Android et je suis coincé avec les vues de liste.

Ce que je veux, c'est avoir 4 lignes d'affilée dans la liste avec différents styles de police

rowlayout.xml

<TextView 
    android:id="@+id/1"
    android:visibility="gone"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

<TextView 
    android:id="@+id/2"
    android:textSize="30sp"
    android:textStyle="bold"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>

<TextView 
    android:id="@+id/3"
    android:typeface="sans"
    android:textSize="20sp"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>

    <TextView 
    android:id="@+id/4"
    android:typeface="sans"
    android:textSize="15sp"
    android:textStyle="italic"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>

J'ai ceci dans un fichier xml séparé

results.xml

<ListView
android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_below="@id/TitleLbl" >
</Listview>

et mon adaptateur de tableau ressemble à ceci

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,R.layout.rowlayout, R.id.2, Array);
setListAdapter(adapter);

Ce que j'essaie de faire, c'est d'obtenir une arraylist (contenant l'ID, le nom, le nom et le numéro) pour remplir la liste afin que chaque information soit sur sa propre ligne dans la ligne.

l'adaptateur de tableau ci-dessus fonctionne, mais chacune des quatre informations est dans sa propre ligne.

Quelqu'un peut-il aider?

(aussi, j'ai parcouru Internet pour essayer de régler le problème, mais je n'arrive pas à trouver quoi que ce soit qui m'aide)

Erreur:

Vous devrez peut-être utiliser une vue de liste personnalisée avec un adaptateur de baie personnalisé. Référez-vous à ce lien par exemple.

Contenu:

Le didacticiel Android HelloListView ( http://developer.android.com/resources/tutorials/views/hello-listview.html ) montre comment lier un ListView à un tableau d'objets chaîne, mais vous le dépasserez probablement assez rapidement. Cet article vous montrera comment lier le ListView à un ArrayList d'objets personnalisés, ainsi que créer un ListView multiligne.

Supposons que vous ayez une sorte de fonctionnalité de recherche qui renvoie une liste de personnes, ainsi que des adresses et des numéros de téléphone. Nous allons afficher ces données sur trois lignes formatées pour chaque résultat et les rendre cliquables.

Tout d'abord, créez votre nouveau projet Android et créez deux fichiers de mise en page. Main.xml sera probablement déjà créé par défaut, alors collez ceci dans:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical" 
 android:layout_width="fill_parent"
  android:layout_height="fill_parent">
 <TextView
  android:layout_height="wrap_content"
  android:text="Custom ListView Contents"
  android:gravity="center_vertical|center_horizontal"
  android:layout_width="fill_parent" />
  <ListView 
   android:id="@+id/ListView01" 
   android:layout_height="wrap_content"
   android:layout_width="fill_parent"/>
</LinearLayout>

Ensuite, créez un fichier de mise en page appelé custom_row_view.xml. Cette mise en page sera le modèle pour chaque ligne individuelle dans ListView. Vous pouvez utiliser à peu près n'importe quel type de disposition - Relative, Table, etc., mais pour cela, nous utiliserons simplement Linear:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical" 
 android:layout_width="fill_parent"
  android:layout_height="fill_parent">
  <TextView android:id="@+id/name"
  android:textSize="14sp" 
  android:textStyle="bold" 
  android:textColor="#FFFF00" 
  android:layout_width="wrap_content" 
  android:layout_height="wrap_content"/>
 <TextView android:id="@+id/cityState" 
  android:layout_width="wrap_content" 
  android:layout_height="wrap_content"/>
 <TextView android:id="@+id/phone" 
  android:layout_width="wrap_content" 
  android:layout_height="wrap_content"/>
</LinearLayout>

Maintenant, ajoutez un objet appelé SearchResults. Collez ce code dans:

public class SearchResults {
 private String name = "";
 private String cityState = "";
 private String phone = "";

 public void setName(String name) {
  this.name = name;
 }

 public String getName() {
  return name;
 }

 public void setCityState(String cityState) {
  this.cityState = cityState;
 }

 public String getCityState() {
  return cityState;
 }

 public void setPhone(String phone) {
  this.phone = phone;
 }

 public String getPhone() {
  return phone;
 }
}

C'est la classe que nous allons remplir avec nos données et charger dans un ArrayList.

Ensuite, vous aurez besoin d'un adaptateur personnalisé. Celui-ci étend simplement le BaseAdapter, mais vous pouvez étendre le ArrayAdapter si vous préférez.

public class MyCustomBaseAdapter extends BaseAdapter {
 private static ArrayList<SearchResults> searchArrayList;

 private LayoutInflater mInflater;

 public MyCustomBaseAdapter(Context context, ArrayList<SearchResults> results) {
  searchArrayList = results;
  mInflater = LayoutInflater.from(context);
 }

 public int getCount() {
  return searchArrayList.size();
 }

 public Object getItem(int position) {
  return searchArrayList.get(position);
 }

 public long getItemId(int position) {
  return position;
 }

 public View getView(int position, View convertView, ViewGroup parent) {
  ViewHolder holder;
  if (convertView == null) {
   convertView = mInflater.inflate(R.layout.custom_row_view, null);
   holder = new ViewHolder();
   holder.txtName = (TextView) convertView.findViewById(R.id.name);
   holder.txtCityState = (TextView) convertView.findViewById(R.id.cityState);
   holder.txtPhone = (TextView) convertView.findViewById(R.id.phone);

   convertView.setTag(holder);
  } else {
   holder = (ViewHolder) convertView.getTag();
  }

  holder.txtName.setText(searchArrayList.get(position).getName());
  holder.txtCityState.setText(searchArrayList.get(position).getCityState());
  holder.txtPhone.setText(searchArrayList.get(position).getPhone());

  return convertView;
 }

 static class ViewHolder {
  TextView txtName;
  TextView txtCityState;
  TextView txtPhone;
 }
}

(C'est fondamentalement le même que la démo de l'API List14.java)

Enfin, nous allons tout câbler dans le fichier de classe principal:

public class CustomListView extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        ArrayList<SearchResults> searchResults = GetSearchResults();

        final ListView lv1 = (ListView) findViewById(R.id.ListView01);
        lv1.setAdapter(new MyCustomBaseAdapter(this, searchResults));

        lv1.setOnItemClickListener(new OnItemClickListener() {
         @Override
         public void onItemClick(AdapterView<?> a, View v, int position, long id) { 
          Object o = lv1.getItemAtPosition(position);
          SearchResults fullObject = (SearchResults)o;
          Toast.makeText(ListViewBlogPost.this, "You have chosen: " + " " + fullObject.getName(), Toast.LENGTH_LONG).show();
         }  
        });
    }

    private ArrayList<SearchResults> GetSearchResults(){
     ArrayList<SearchResults> results = new ArrayList<SearchResults>();

     SearchResults sr1 = new SearchResults();
     sr1.setName("John Smith");
     sr1.setCityState("Dallas, TX");
     sr1.setPhone("214-555-1234");
     results.add(sr1);

     sr1 = new SearchResults();
     sr1.setName("Jane Doe");
     sr1.setCityState("Atlanta, GA");
     sr1.setPhone("469-555-2587");
     results.add(sr1);

     sr1 = new SearchResults();
     sr1.setName("Steve Young");
     sr1.setCityState("Miami, FL");
     sr1.setPhone("305-555-7895");
     results.add(sr1);

     sr1 = new SearchResults();
     sr1.setName("Fred Jones");
     sr1.setCityState("Las Vegas, NV");
     sr1.setPhone("612-555-8214");
     results.add(sr1);

     return results;
    }
}

Notez que nous obtenons d'abord une ArrayList d'objets SearchResults (normalement, cela proviendrait d'une source de données externe ...), la passons à l'adaptateur personnalisé, puis mettons en place un écouteur de clic. L'écouteur récupère l'élément sur lequel l'utilisateur a cliqué, le reconvertit en objet SearchResults et fait tout ce qu'il doit faire.

Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.

En cas d'infraction, veuillez [email protected] Supprimer.

modifier le
0

laisse moi dire quelques mots

0commentaires
connexionAprès avoir participé à la revue

Articles connexes

Android - ListView avec ArrayAdapter et TextViews masquées

obtenir la valeur arrayList dans ArrayAdapter pour un listView dans le studio Android

Comment utiliser ListView, ArrayList, ArrayAdapter et notifyDataSetChanged avec un exécutable et un gestionnaire de messages dans le thread principal

ArrayAdapter et ListView ne fonctionnent pas

Android - ArrayAdapter bascule ImageButton src entre Lecture et Pause dans ListView

Android: Spinner et ListView avec le même ArrayList

onClickItem ListView ArrayAdapter personnalisé Android Studio

ArrayAdapter personnalisé pour un ListView (Android)

impossible de résoudre le symbole ListView et ArrayAdapter

ListView et ArrayAdapter avec ConstraintLayout bloquent l'application

android listview and arrayList data optimization

ajouter ArrayList <object> à listview -android

Android: ListView dans ArrayAdapter change pendant le défilement

Android ListView ArrayAdapter - disposition des cases à cocher / bouton radio

Android: Rechercher dans ArrayList et afficher dans ListView via EditText ChangedListener?

L'adaptateur de tableau Android avec ArrayList et ListView ne se met pas à jour lorsque l'arraylist est modifié

Comment réparer les éléments de listview en double et deux Arraylist dans une listview dans Android Studio

Différence entre ArrayAdapter et ListAdapter dans Android?

Android Studio - ListView et Maps

Deux ArrayList dans un ListView sous Android

Une modification de TextView s'applique à plusieurs TextViews à l'aide de ListView et ArrayAdapter

ArrayAdapter et retrofit 2.0

Trying to create a custom ArrayAdapter with ArrayList

Populate Data to Listview but Arrayadapter not working

ListView semble vide avec ArrayAdapter

problèmes lors de la configuration de ArrayList <Drawable> avec ArrayAdapter <Drawable> dans Android

Ajouter une liste à ArrayList <String> et afficher sur ListView

Comment définir une variable dessinable avec ArrayAdapter pour l'afficher dans ListView sous Android

Mise à jour d'une seule ligne dans Android ListView toutes les millisecondes à partir d'ArrayAdapter

TOP liste

  1. 1

    comment afficher un bouton au-dessus d'un autre élément ?

  2. 2

    impossible d'obtenir l'image d'arrière-plan en plein écran dans reactjs

  3. 3

    Je continue à obtenir l'objet 'WSGIRequest' n'a pas d'attribut 'Get' sur django

  4. 4

    comment supprimer "compte de connexion google" à des fins de développement - actions sur google

  5. 5

    Conversion double en BigDecimal en Java

  6. 6

    Impossible d'accéder à la vue personnalisée pendant le test de l'interface utilisateur dans XCode

  7. 7

    Algorithme: diviser de manière optimale une chaîne en 3 sous-chaînes

  8. 8

    Passer la taille d'un tableau 2D à une fonction ?

  9. 9

    Comment obtenir l'intégration contextuelle d'une phrase dans une phrase à l'aide de BERT ?

  10. 10

    Comment changer le navigateur par défaut en Microsoft Edge pour Jupyter Notebook sous Windows 10 ?

  11. 11

    CSS: before ne fonctionne pas sur certains éléments,: after fonctionne très bien

  12. 12

    Comment créer un bot à compte à rebours dans Discord en utilisant Python

  13. 13

    Comment ajouter une entrée à une table de base de données pour une combinaison de deux tables

  14. 14

    Exporter la table de l'arborescence vers CSV avec mise en forme

  15. 15

    Comment activer le message Pylint "too-many-locals" dans VS Code?

  16. 16

    Créer un système Buzzer à l'aide de python

  17. 17

    Spring @RequestParam DateTime format comme ISO 8601 Date Heure facultative

  18. 18

    Empêcher l'allocation de mémoire dans la génération de combinaison récursive

  19. 19

    Déplacement des moindres carrés d'ajustement pour les déplacements de points ayant des problèmes

  20. 20

    Comment choisir le nombre de fragments et de répliques Elasticsearch

  21. 21

    Microsoft.WebApplication.targets

chaudétiquette

Archive