studio example java android android-layout android-listview android-arrayadapter

java - example - Artículo de fila personalizado de Android para ListView



listview android studio example (5)

Agregue este row.xml a su carpeta de diseño

<?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="match_parent" android:orientation="vertical" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Header"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/text"/> </LinearLayout>

hacer su diseño xml principal como este

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="horizontal" > <ListView android:id="@+id/listview" android:layout_width="fill_parent" android:layout_height="fill_parent" > </ListView> </LinearLayout>

Este es tu adaptador

class yourAdapter extends BaseAdapter { Context context; String[] data; private static LayoutInflater inflater = null; public yourAdapter(Context context, String[] 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; } }

Tu actividad 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 String[] { "data1", "data2" })); } }

Los resultados

Tengo un ListView que debe tener el siguiente diseño en sus filas:

HEADER Text

HEADER debe ser estático, pero el Text cambia cada pocos segundos.

Lo implementé ArrayAdapter una String[] array , la ArrayAdapter a un ArrayAdapter y la configuré cada vez que los datos cambian:

data_array = populateString(); adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id.text1, data_array); listView.setAdapter(adapter);

Mi problema es que no sé cómo mostrar los datos en el formato anterior.

Gracias por adelantado.


Use una vista de lista personalizada.

También puede personalizar cómo se ve la fila al tener un fondo personalizado. activity_main.xml

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:background="#0095FF"> //background color <ListView android:id="@+id/list" android:layout_width="fill_parent" android:layout_height="0dip" android:focusableInTouchMode="false" android:listSelector="@android:color/transparent" android:layout_weight="2" android:headerDividersEnabled="false" android:footerDividersEnabled="false" android:dividerHeight="8dp" android:divider="#000000" android:cacheColorHint="#000000" android:drawSelectorOnTop="false"> </ListView>

Actividad principal

Definir populateString () en MainActivity

public class MainActivity extends Activity { String data_array[]; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); data_array = populateString(); 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. Diseño personalizado para cada fila.

<?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="match_parent" android:orientation="vertical" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:text="Header" /> <TextView android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:text="TextView" /> </LinearLayout>

Inflar un diseño personalizado. Utilice un soporte de vista para desplazamiento suave y rendimiento.

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

http://www.youtube.com/watch?v=wDBM6wVEO70 . La charla es sobre el rendimiento de la vista de lista por los desarrolladores de Android.


crear archivo de diseño de recursos list_item.xml

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:id="@+id/header_text" android:layout_height="0dp" android:layout_width="fill_parent" android:layout_weight="1" android:text="Header" /> <TextView android:id="@+id/item_text" android:layout_height="0dp" android:layout_width="fill_parent" android:layout_weight="1" android:text="dynamic text" /> </LinearLayout>

e inicialice un adaptador como este

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


puede seguir BaseAdapter y crear su archivo Xml custome, BaseAdpter con BaseAdpter y BaseAdpter con BaseAdpter aquí debe cambiar el archivo xml como Require.


Paso 1: crea un archivo XML

<?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="match_parent" android:orientation="vertical"> <ListView android:id="@+id/lvItems" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout>

Paso 2: Studnet.java

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

Paso 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<Student> studentArrayList ; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); lvItems = (ListView) findViewById(R.id.lvItems); studentArrayList = new ArrayList<Student>(); dataSaving(); CustomAdapter adapter = new CustomAdapter(MainActivity.this,studentArrayList); lvItems.setAdapter(adapter); } private void dataSaving() { Student student = new Student(); student.setEmail("[email protected]"); student.setPhone("1234567890"); student.setAddress("Hyderabad"); studentArrayList.add(student); student = new Student(); student.setEmail("[email protected]"); student.setPhone("1234567890"); student.setAddress("Banglore"); studentArrayList.add(student); student = new Student(); student.setEmail("[email protected]"); student.setPhone("1234567890"); student.setAddress("Banglore"); studentArrayList.add(student); student = new Student(); student.setEmail("[email protected]"); student.setPhone("1234567890"); student.setAddress("Banglore"); studentArrayList.add(student); } }

Paso 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<Student> studentList; Context mContext; public CustomAdapter(Context context, ArrayList<Student> 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; } }