Élément de ligne personnalisé Android pour ListView

J’ai un ListView qui devrait avoir la disposition suivante dans ses lignes:

HEADER Text 

HEADER doit être statique mais le Text change toutes les quelques secondes.

Je l’ai implémenté en ArrayAdapter un Ssortingng[] array , le transmets à un ArrayAdapter et le définissent chaque fois que les données changent:

 data_array = populateSsortingng(); adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, android.R.id.text1, data_array); listView.setAdapter(adapter); 

Mon problème est que je ne sais pas comment afficher les données dans le format ci-dessus.

Merci d’avance.

Ajoutez ce row.xml à votre dossier de mise en page

      

faites votre mise en page principale de xml comme ceci

      

Ceci est votre adaptateur

 class yourAdapter extends BaseAdapter { Context context; Ssortingng[] data; private static LayoutInflater inflater = null; public yourAdapter(Context context, Ssortingng[] data) { // TODO Auto-generated constructor stub this.context = context; this.data = data; inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); } @Override public int getCount() { // TODO Auto-generated method stub return data.length; } @Override public Object getItem(int position) { // TODO Auto-generated method stub return data[position]; } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub View vi = convertView; if (vi == null) vi = inflater.inflate(R.layout.row, null); TextView text = (TextView) vi.findViewById(R.id.text); text.setText(data[position]); return vi; } } 

Votre activité java

 public class StackActivity extends Activity { ListView listview; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); listview = (ListView) findViewById(R.id.listview); listview.setAdapter(new yourAdapter(this, new Ssortingng[] { "data1", "data2" })); } } 

Les resultats

entrer la description de l'image ici

Utilisez une vue de liste personnalisée.

Vous pouvez également personnaliser l’apparence de la ligne en ayant un arrière-plan personnalisé. activity_main.xml

   //background color   

Activité principale

Définir populateSsortingng () dans MainActivity

  public class MainActivity extends Activity { Ssortingng data_array[]; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); data_array = populateSsortingng(); ListView ll = (ListView) findViewById(R.id.list); CustomAdapter cus = new CustomAdapter(); ll.setAdapter(cus); } class CustomAdapter extends BaseAdapter { LayoutInflater mInflater; public CustomAdapter() { mInflater = (LayoutInflater) MainActivity.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); } @Override public int getCount() { // TODO Auto-generated method stub return data_array.length;//listview item count. } @Override public Object getItem(int position) { // TODO Auto-generated method stub return position; } @Override public long getItemId(int position) { // TODO Auto-generated method stub return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub final ViewHolder vh; vh= new ViewHolder(); if(convertView==null ) { convertView=mInflater.inflate(R.layout.row, parent,false); //inflate custom layour vh.tv2= (TextView)convertView.findViewById(R.id.textView2); } else { convertView.setTag(vh); } //vh.tv2.setText("Position = "+position); vh.tv2.setText(data_array[position]); //set text of second textview based on position return convertView; } class ViewHolder { TextView tv1,tv2; } } } 

row.xml. Disposition personnalisée pour chaque ligne.

      

Gonflez une mise en page personnalisée. Utilisez un support de visualisation pour un défilement et des performances en douceur .

http://developer.android.com/training/improving-layouts/smooth-scrolling.html

http://www.youtube.com/watch?v=wDBM6wVEO70 . La discussion porte sur les performances de listview par les développeurs Android.

entrer la description de l'image ici

créer le fichier de disposition des ressources list_item.xml

      

et initialiser l’adaptateur comme ça

 adapter = new ArrayAdapter(this, R.layout.list_item,R.id.item_text,data_array); 

Étape 1: Créer un fichier XML

      

Étape 2: Studnet.java

 package com.scancode.acutesoft.telephonymanagerapp; public class Student { Ssortingng email,phone,address; public Ssortingng getEmail() { return email; } public void setEmail(Ssortingng email) { this.email = email; } public Ssortingng getPhone() { return phone; } public void setPhone(Ssortingng phone) { this.phone = phone; } public Ssortingng getAddress() { return address; } public void setAddress(Ssortingng address) { this.address = address; } } 

Étape 3: MainActivity.java

  package com.scancode.acutesoft.telephonymanagerapp; import android.app.Activity; import android.os.Bundle; import android.widget.ListView; import java.util.ArrayList; public class MainActivity extends Activity { ListView lvItems; ArrayList studentArrayList ; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); lvItems = (ListView) findViewById(R.id.lvItems); studentArrayList = new ArrayList(); dataSaving(); CustomAdapter adapter = new CustomAdapter(MainActivity.this,studentArrayList); lvItems.setAdapter(adapter); } private void dataSaving() { Student student = new Student(); student.setEmail("abc@gmail.com"); student.setPhone("1234567890"); student.setAddress("Hyderabad"); studentArrayList.add(student); student = new Student(); student.setEmail("xyz@gmail.com"); student.setPhone("1234567890"); student.setAddress("Banglore"); studentArrayList.add(student); student = new Student(); student.setEmail("xyz@gmail.com"); student.setPhone("1234567890"); student.setAddress("Banglore"); studentArrayList.add(student); student = new Student(); student.setEmail("xyz@gmail.com"); student.setPhone("1234567890"); student.setAddress("Banglore"); studentArrayList.add(student); } } 

Etape 4: CustomAdapter.java

  package com.scancode.acutesoft.telephonymanagerapp; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; import java.util.ArrayList; public class CustomAdapter extends BaseAdapter { ArrayList studentList; Context mContext; public CustomAdapter(Context context, ArrayList studentArrayList) { this.mContext = context; this.studentList = studentArrayList; } @Override public int getCount() { return studentList.size(); } @Override public Object getItem(int position) { return position; } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { Student student = studentList.get(position); convertView = LayoutInflater.from(mContext).inflate(R.layout.student_row,null); TextView tvStudEmail = (TextView) convertView.findViewById(R.id.tvStudEmail); TextView tvStudPhone = (TextView) convertView.findViewById(R.id.tvStudPhone); TextView tvStudAddress = (TextView) convertView.findViewById(R.id.tvStudAddress); tvStudEmail.setText(student.getEmail()); tvStudPhone.setText(student.getPhone()); tvStudAddress.setText(student.getAddress()); return convertView; } } 

Vous pouvez suivre BaseAdapter et créer votre fichier BaseAdpter et le lier à BaseAdpter et le remplir avec Listview Voir ici le besoin de changer le fichier xml en tant que Require.