2013-07-22 2 views
1

Я пытаюсь создать элемент списка, который состоит из двух элементов списка выше другого. Код, я использую это:android как создать многострочный вид списка

package com.example.list2; 

import android.os.Bundle; 
import android.app.Activity; 
import android.view.Menu; 
import android.widget.ListView; 

public class MainActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     ListView lv1=(ListView)findViewById(R.id.listView1); 
     Level data[] = new Level[] 
       { 
       new Level("Heading 1", "Subheading 1"), 
       new Level("Heading 2", "Subheading 2"), 
       new Level("Heading 3", "Subheading 3") 
       }; 
     LevelAdapter adp=new LevelAdapter(this, R.layout.list_item, data); 
     lv1.setAdapter(adp); 


    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

} 

файл level.java это:

package com.example.list2; 

public class Level { 
    //public int icon; 
    public String title; 
    public String title2; 

    public Level() 
    { 
     super(); 
    } 

    public Level(String title,String title2) { 
     super(); 
     //this.icon = icon; 
     this.title = title; 
     this.title2=title2; 
    } 

} 

leveladapter это

package com.example.list2; 

import android.app.Activity; 
import android.content.Context; 
import android.graphics.Typeface; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.ImageView; 
import android.widget.TextView; 

public class LevelAdapter extends ArrayAdapter<Level> { 

    static Context context; 
     static int layoutResourceId; 
     Level data[] = null; 

    public LevelAdapter(Context context, int layoutResourceId, Level[] data) { 
      super(context, layoutResourceId, data); 
      this.layoutResourceId = layoutResourceId; 
      this.context = context; 
      this.data = data; 
     } 


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

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      View row = convertView; 
      WeatherHolder holder = null; 

      if(row == null) 
      { 
       LayoutInflater inflater = ((Activity)context).getLayoutInflater(); 
       row = inflater.inflate(layoutResourceId, parent, false); 
       //row.setMinimumHeight(200); 
       holder = new WeatherHolder(); 
       // holder.imgIcon = (ImageView)row.findViewById(R.id.imgIcon); 
       holder.txtTitle = (TextView)row.findViewById(R.id.txtTitle); 
       holder.txtTitle2 = (TextView)row.findViewById(R.id.txtTitle2); 

       row.setTag(holder); 
      } 
      else 
      { 
       holder = (WeatherHolder)row.getTag(); 
      } 

      Level weather = data[position]; 
      holder.txtTitle.setText(weather.title); 
     // holder.imgIcon.setImageResource(weather.icon); 

      return row; 
     } 

     static class WeatherHolder 
     { 
     // ImageView imgIcon; 
      TextView txtTitle; 
      TextView txtTitle2; 
     // ImageView imgIcon2; 
     } 

} 

расположение элемента списка это

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:padding="10dp"> 



    <TextView android:id="@+id/txtTitle" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:gravity="center_vertical" 
     android:textStyle="bold" 
     android:textSize="22sp" 
     android:layout_marginTop="5dp" 
     android:layout_marginBottom="5dp" 
     android:padding="50dip" 
     android:textColor="#736F6E" 
     android:layout_alignParentLeft="true" 
     android:textAppearance="@android:attr/textAppearanceLarge" 
     /> 
    <TextView 
     android:id="@+id/txtTitle2" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:gravity="center_vertical" 
     android:layout_below="@id/txtTitle" 
     android:textStyle="bold" 
     android:textSize="12sp" 
     android:layout_marginTop="5dp" 
     android:layout_marginBottom="5dp" 
     android:padding="50dip" 
     android:textColor="#736F6E" 
     android:layout_alignParentLeft="true" 
     android:textAppearance="@android:attr/textAppearanceLarge" 
     /> 

</RelativeLayout> 

и, наконец, макет для основного переменного тока сительности это

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    > 


    <ListView 
     android:id="@+id/listView1" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_marginLeft="16dp" 
     android:layout_marginRight="16dp" 
     android:dividerHeight="1dp" 

     /> 

</RelativeLayout> 

В выводе, все я получаю элемент списка, который имеет очень большую высоту, но только заголовки которые будут отображаться и не подзаголовки. Где я иду не так? Благодаря

+0

Почему у вас есть «fill_parent» в макете элементов? – gunar

+0

Я сделал это, потому что у меня есть вид списка, занимающий весь экран. –

+0

Я имею в виду макет списка. – gunar

ответ

3

Ну, я сузил размеры элемента списка XML в:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" 
    android:padding="10dp" > 

    <TextView 
     android:id="@+id/txtTitle" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_marginBottom="2dp" 
     android:layout_marginTop="2dp" 
     android:gravity="center_vertical" 
     android:padding="2dip" 
     android:textAppearance="@android:attr/textAppearanceLarge" 
     android:textColor="#736F6E" 
     android:textSize="22sp" 
     android:textStyle="bold" /> 

    <TextView 
     android:id="@+id/txtTitle2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_below="@id/txtTitle" 
     android:layout_marginBottom="2dp" 
     android:layout_marginTop="2dp" 
     android:gravity="center_vertical" 
     android:padding="2dip" 
     android:textAppearance="@android:attr/textAppearanceLarge" 
     android:textColor="#736F6E" 
     android:textSize="12sp" 
     android:textStyle="bold" /> 

</RelativeLayout> 

и LevelAdapter#getView, как раз перед return row я добавил: holder.txtTitle2.setText(weather.title2);

Результат ниже файла изображения: Result image after below two changes

Это то, чего вы пытаетесь достичь? Я не упоминаю о других улучшениях как удаление полей static от LevelAdapter.

+0

Да, это именно то, чего я пытаюсь достичь. Не могли бы вы также рассказать мне, какие еще изменения вы сделали? –

+0

Только те 2, о которых я упомянул. – gunar

+0

Я заменил 'fill_parent'' wrap_content' и удалил те огромные поля и прокладки, которые у вас были в 'TextView'. Кроме того, в Adapter добавлен код для отображения подзаголовков. – gunar

Смежные вопросы