Refiriendo a esto, he creado siguientes:

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();
    }
}

Y funciona a la perfección. Pero según los requisitos, a mi cada listview fila no sólo serán una sola cadena. En lugar de eso, va a ser la colección de vistas que consta de imageview y textviews almacenados en row.xml.

Ahora mis preguntas son:

  • Lo reemplazará adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, listItems); ? Será adapter = new ArrayAdapter<String>(this,R.layout.row, listItems); ??

  • ¿Cómo puedo referir a imageview y textviews de cada fila? ¿Cómo puedo establecer y obtener datos de ellos? ¿Cómo puedo reconocer a sus eventos de clic?

  • Es el uso de Adapter debe? o puedo conseguir lejos con él?

Cualquier ayuda es apreciada.

cree su propio personalizado Adaptador y anular el getView() método para inflar su fila deseada de diseño

OriginalEl autor GAMA | 2013-06-06

3 Comentarios

  1. 4

    Pero según los requisitos, a mi cada listview fila no acaba de ser una sola
    de la cadena. En lugar de eso, va a ser la colección de vistas que consta de imageview
    y textviews almacenados en row.xml.

    => El ListView se está mostrando es el uso normal del adaptador. Si quieres que tu artículo contiene varias vistas como Imageview, Textview o cualquier punto de vista, entonces usted tiene que definir adaptador Personalizado de clase mediante la extensión de cualquiera de BaseAdapter o ArrayAdapter.

    Lo que le vuelva a colocar el adaptador = new
    ArrayAdapter(this,android.R.diseño.simple_list_item_1,
    listItems); ? Será adaptador = new
    ArrayAdapter(this,R. layout.fila, listItems); ??

    => Aquí ArrayAdapter no funcionará debido a su fila xml de diseño puede contener diferentes puntos de vista como el ImageView, TextView, Botón o cualquier otro widget. Así que yo sugeriría usted para definir su propio adaptador de clase donde se tenga que reemplazar getView() método.

    ¿Cómo puedo referir a imageview y textviews de cada fila? ¿Cómo puedo configurar
    y obtener datos de ellos? ¿Cómo puedo reconocer a sus eventos de clic?

    => Como he dicho anteriormente, una vez que defina adaptador personalizado de clase, tendrá que reemplazar getView() método con el que se puede encontrar cualquier punto de vista de su fila fichero xml de diseño, referencia y/mostrar cualquier dato que desee.

    Es el uso de Adaptador? o puedo conseguir lejos con él?

    => Sí su debe, sin adaptador, usted no será capaz de mostrar en los datos-encuadernada de widgets como el GridView, ListView, Spinner, Galería, etc.

    Ejemplo para la definición de adaptador personalizado:

    1. Mi charla en el ListView
    2. http://www.vogella.com/articles/AndroidListView/article.html
    bienvenida!! Y conseguir hacer clic objeto/elemento y buscar cualquier detalle que desees de ese objeto.

    OriginalEl autor Paresh Mayani

  2. 1

    Estos son los pasos básicos:

    • Crear un diseño personalizado para su fila (tal vez con un ImageView y TextView). Se utiliza android.R.layout.simple_list_item_1 en su ejemplo, que si usted mira en el Android source es sólo un diseño con una sola TextView.
    • Crear una clase que extienda BaseAdapter. Esta será la lista de adaptador. Se pueden pasar los datos de su adaptador a través del constructor o un método. Crear un campo donde va a almacenar los datos.

    Ahora a responder a tus preguntas:

    • ¿Cómo puedo referir a imageview y textviews de cada fila?
    • ¿Cómo puedo establecer y obtener datos de ellos?
    • ¿Cómo puedo reconocer a sus eventos de clic?

    Al extender BaseAdapter se implementará el método de public View getView (int position, View convertView, ViewGroup parent). En este método, usted tiene que inflar su fila personalizada de diseño para crear la vista. A continuación, encontrará el ImageView y TextView utilizando el método findViewById. Cuando usted tiene el ImageView y TextView llamar setText o setImageSource para establecer sus datos y setOnClickListener para los eventos de clic.

    OriginalEl autor jfs

  3. 1

    Es aquí el código de mi proyecto

    Considerar su lista tiene dos campo de texto y un ImageView de la siguiente manera: row.xml» archivo. Copiar esto en la carpeta res

    <?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="vertical">
    
        <TextView
            android:id="@+id/row_q"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center_vertical"
            android:text="Solve[{x^2==4,x+y^2==6},{x,y}]"
            android:textAppearance="@android:style/TextAppearance.Small"
            android:textStyle="bold|italic" />
    
    <TextView
        android:id="@+id/row_a"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/AliceBlue"
        android:gravity="center_vertical"
        android:paddingLeft="10dp"
        android:textAppearance="@android:style/TextAppearance.Small" />
    
    <ImageView
        android:id="@+id/row_a_math"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:adjustViewBounds="true"
        android:scaleType="fitXY"/>
    
    <LinearLayout
    android:id="@+id/graph_layout"
    android:layout_width="match_parent"
    android:layout_height="200dp"
    android:visibility="gone" >        
    </LinearLayout>

    Crear a partir de la clase en su actividad para almacenar este tipo de datos

    private class QuesSolnInfo { 
        public String ques; 
        public String ans; 
        public Bitmap ans_b; 
    
        public QuesSolnInfo(String ques, String ans, Bitmap ans_b) { 
            this.ques = ques;  
            this.ans = ans; 
            this.ans_b = ans_b; 
        } 
    }

    //Hacer el siguiente como miembros de la clase

    OutputStringArrayAdapter _outputArrayAdapter = null; 
    ArrayList<QuesSolnInfo> _outputArrayList = null; 

    //Inicializar en el Método onCreate

    _outputArrayAdapter = new OutputStringArrayAdapter(getActivity(), _outputArrayList); 
    _outputListView.setAdapter(_outputArrayAdapter); 

    Definitition de ArrayAdapter

     protected class OutputStringArrayAdapter extends ArrayAdapter<QuesSolnInfo> { 
        OutputStringArrayAdapter(Context context, ArrayList<QuesSolnInfo> stringArrayList) { 
            super(context, R.layout.list, stringArrayList); 
        } 
    
        public View getView(int position, View convertView, ViewGroup parent) { 
            if (convertView == null) { 
                convertView = LayoutInflater.from(getContext()).inflate(R.layout.row, null); 
            } 
    
            TextView t_ques = (TextView) convertView.findViewById(R.id.row_q); 
            t_ques.setText(getItem(position).ques); 
    
            boolean debug = true; 
            TextView t_ans = (TextView) convertView.findViewById(R.id.row_a); 
    
            String texx = getItem(position).ans;
            t_ans.setText(texx);       
    
            final ImageView w = (ImageView) convertView.findViewById(R.id.row_a_math); 
            w.setImageBitmap(getItem(position).ans_b); 
            //Show answer in webview               
            return convertView; 
        }        
    } 

    Ahora, para agregar cualquier elemento a su lista siguiente

    _outputArrayList.add(0, new QuesSolnInfo(string1.string2, bitmap0)); 
    _outputArrayAdapter.notifyDataSetChanged(); 

    OriginalEl autor Shakti Malik

Dejar respuesta

Please enter your comment!
Please enter your name here