2011-01-29 18 views
5

me gustaría tener dos líneas en cada vista de lista item.This es mi código, pero no su trabajo ...2 líneas de un elemento ListView

reeditada CÓDIGO

public class nea extends ListActivity{ 
    private List<Message> messages; 





    @Override 
    public void onCreate(Bundle icicle) { 
     super.onCreate(icicle); 
     setContentView(R.layout.main2); 
     loadFeed(ParserType.DOM); 




    } 


    private void loadFeed(ParserType type){ 
     try{ 
      Log.i("News", "ParserType="+type.name()); 
      FeedParser parser = FeedParserFactory.getParser(type); 
      long start = System.currentTimeMillis(); 
      messages = parser.parse(); 
      long duration = System.currentTimeMillis() - start; 
      Log.i("News", "Parser duration=" + duration); 
      String xml = writeXml(); 
      Log.i("News", xml); 
      List<String> titles = new ArrayList<String>(messages.size()); 
      for (Message msg : messages){ 




       String o = titles.get(messages.size()); 
       if (o != null) { 
        TextView tt = (TextView) findViewById(R.id.TextView01); 
        TextView bt = (TextView) findViewById(R.id.TextView02); 
        if (tt != null) { 
         titles.add(""+msg.getDate());       } 
        if(bt != null){ 
         titles.add("date: "+ msg.getTitle()); 
        }return; 
      //titles.add(msg.getDate()+"\n"+msg.getTitle()); 
       } 
      // titles.add(msg.getTitle()+" "+msg.getDate()); 

      } 
      ArrayAdapter<String> adapter = 
       new ArrayAdapter<String>(this, R.layout.row,titles); 
      this.setListAdapter(adapter); 
     // textView.setText(Html.fromHtml(titles.get(position))); 




     } catch (Throwable t){ 
      Log.e("News",t.getMessage(),t); 
     } 
    } 

SEGUNDO manera- -no demasiado trabajo

List<String> titles = new ArrayList<String>(messages.size()); 
       for (Message msg : messages){  

         String o = titles.get(messages.size()); 
        if (o != null) { 
         TextView tt = (TextView) findViewById(R.id.TextView01); 
         TextView bt = (TextView) findViewById(R.id.TextView02); 
         if (tt != null) { 
          titles.add(""+msg.getDate());       } 
         if(bt != null){ 
          titles.add("date: "+ msg.getTitle()); 
         }return; 
       //titles.add(msg.getDate()+"\n"+msg.getTitle()); 
        } 
       // titles.add(msg.getTitle()+" "+msg.getDate()); 

       } 
       ArrayAdapter<String> adapter = 
        new ArrayAdapter<String>(this, R.layout.row,titles); 
       this.setListAdapter(adapter); 
      // textView.setText(Html.fromHtml(titles.get(position))); 

      } catch (Throwable t){ 


Log.e("News",t.getMessage(),t); 
     } 
+1

Tendrá que colocar todo el código para esto, no está claro lo que está haciendo allí. ¿Qué es mensajes? ¿Cómo está configurando su fuente de datos, adaptador y vista de lista? – Jems

+0

Ok, he publicado más código señor –

Respuesta

0

Las líneas:

TextView tt = (TextView) findViewById(R.id.TextView01); 
TextView bt = (TextView) findViewById(R.id.TextView02); 

no tienen sentido porque no hay una vista de elemento de lista para msg en ese punto, y no está encontrando las vistas de texto por ID dentro de una vista de elemento de lista, sino más bien la vista principal.

Cuando se inicia la aplicación por primera vez, tiene un ListView vacío. A continuación, analiza los mensajes como parte de onCreate (que, por cierto, no es una buena idea, porque los procesos que consumen mucho tiempo no deben realizarse en el subproceso de la interfaz de usuario) y luego intenta buscar las vistas de texto inexistentes con los ID R.id.TextView01 y R.id.TextView02 en la vista principal.

Tenga en cuenta que necesitará dos archivos XML de diseño: uno para el diseño de la actividad de la lista y otro para el diseño de cada elemento de la lista. También tenga en cuenta que findViewById consultas para una vista dentro de otra vista. En este caso, está intentando consultar la vista principal, pero eso no tiene las vistas de texto TextView01 y TextView02; las vistas de texto TextView01 y TextView02 son elementos de las vistas de elementos de la lista que se obtienen al inflar el diseño del elemento de la lista.

Sugiero que empiece con una de las demostraciones de API primero, para que pueda ver un ejemplo completo y funcional de algo similar a lo que está tratando de lograr. Por ejemplo, http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/List14.html

+0

estoy muy agradecido por su respuesta, pero he estado un poco confundido ... –

+1

@kostas: Creo que debería leer algunos tutoriales en 'ListView'. Encontré uno que se ve muy bien: [http://www.androidpeople.com/android-custom-listview-tutorial-example/](http://www.androidpeople.com/android-custom-listview-tutorial-example /). Intenta leer a través de eso. –

2

Solo estoy usando inflar Twine listitem xml layout.En el siguiente ejemplo, text1 es Header y text2 es subtítulo.

public class CustomListAdapter extends BaseAdapter { 

    private String[] stringArray; 
    private Context mContext; 
    private LayoutInflater inflator; 
    int checkbox; 
    /** 
    * 
    * @param context 
    * @param stringArray 
    */ 
    public CustomListAdapter(Context context, String[] stringArray) 
    { 
     this.mContext=context; 
     this.stringArray=stringArray; 
     this.inflator= (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    } 

    @Override 
    public int getCount() 
    { 
     return stringArray.length; 
    } 

    @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) 
    { 

     final MainListHolder mHolder; 
     View v = convertView; 
     if (convertView == null) 
     { 
      mHolder = new MainListHolder(); 
      v = inflator.inflate(android.R.layout.two_line_list_item, null); 
      mHolder.txt1= (TextView) v.findViewById(android.R.id.text1); 
      mHolder.txt2= (TextView) v.findViewById(android.R.id.text2); 
      v.setTag(mHolder); 
     } 
     else 
     { 
      mHolder = (MainListHolder) v.getTag(); 
     } 
     mHolder.txt1.setText(stringArray[position]); 
     mHolder.txt2.setText(stringArray[position]); 

     /*mHolder.txt.setTextSize(12); 
     mHolder.txt.setTextColor(Color.YELLOW); 
     mHolder.txt.setPadding(5, 5, 5, 5);*/ 
     //mHolder.image.setImageResource(R.drawable.icon); 


     return v; 
    } 
    class MainListHolder 
    { 
     private TextView txt1; 
     private TextView txt2; 

    } 



} 

Y también hay un Example en dos líneas listitem

18

Con el fin de crear un ListView con dos líneas de texto en cada artículo, utilizo un SimpleAdapter de la siguiente manera:

Crear una List que contendrá sus datos. Cada entrada de Map tendrá una clave (primera línea) y un valor (segunda línea) de cada uno de los elementos ListView.

List<Map<String, String>> data = new ArrayList<Map<String, String>>(); 

Para cada par queremos poner en el ListView, crear un HashMap y añadirlo a la lista declarado antes.

Map<String, String> datum = new HashMap<String, String>(2); 
       datum.put("First Line", "First line of text"); 
       datum.put("Second Line","Second line of text"); 
       data.add(datum); 

A continuación, declare SimpleAdapter. Observe allí el uso de cadenas de "Primera línea" y "Segunda línea" dentro del constructor. Esto le dirá al adaptador cómo usar las cadenas del Map declarado anteriormente. Tenga en cuenta también el uso del diseño android.R.layout.simple_list_item_2 y el ID de texto android.R.id.text1 y android.R.id.text2.

SimpleAdapter adapter = new SimpleAdapter(this, data, 
        android.R.layout.simple_list_item_2, 
        new String[] {"First Line", "Second Line" }, 
        new int[] {android.R.id.text1, android.R.id.text2 }); 
+1

¿Deberíamos crear simple_list_item_2.xml o ya está definido? Si deberíamos ¿puedes compartir el código? Encontré un diseño xml pero no están funcionando ... – albatross

+1

@albatross si quieres modificar y usar el archivo simple_list_item_2.xml luego ve a este enlace ... [link] (https://github.com/android/platform_frameworks_base)/tree/master/core/res/res/layout) – Ruchir

+1

¡Esta es una solución tan simple que funciona de inmediato! – coolcool1994

0

Si no te preocupa demasiado el diseño y otras cosas, solo quieres tener varias líneas en una vista de lista. La forma más sencilla de hacerlo es así con el retorno de carro '\ n'

xList = FindViewById<ListView>(Resource.Id.xlist); 
mItems = new List<string>(); 
ArrayAdapter<string> adapter = new ArrayAdapter<string>(this, Android.Resource.Layout.SimpleListItem1, mItems); 

xList.Adapter = adapter; 
adapter.Add("FirstLine\nSecondLine\nThirdLine\nEtc"); 
Cuestiones relacionadas