2015-10-31 4 views
0

Я много ищу для ответа и не нашел тот, который мне подходит. Я узнал, что когда я устанавливаю свой layout_heigh на 500dp -> весь отображаемый элемент, но когда он имеет нормальный размер (layout_heigh = wrap_content), отображается только первый элемент.ListView показывает только первый элемент в списке

это мой код:

activity_main.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"> 

    <Button 
     android:layout_width="match_parent" 
     android:layout_height="50dp" 
     android:text="Add Task" 
     android:onClick="addTask" /> 

    <ListView android:id="@+id/myListView" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:drawSelectorOnTop="false"/> 

</LinearLayout> 

xml_item.xml: это за один пункт, чтобы дублировать в ListView

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

    <TextView 
     android:layout_width="100dp" 
     android:layout_height="50dp" 
     android:id="@+id/itemText" 
     android:layout_alignParentLeft="true" 
     android:layout_centerVertical="true" 
     android:padding="15dp" 
     android:textSize="20sp" /> 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/doneBtn" 
     android:layout_alignParentRight="true" 
     android:layout_centerVertical="true" 
     android:layout_marginRight="5dp" 
     android:text="Done" /> 


</RelativeLayout> 

MyListAdapter: класс в main_activit y, который расширяет класс ArrayAdapter, поэтому я могу помещать в одну строку как TextView, так и кнопку.

private class MyListAdapter extends ArrayAdapter<String> { 

     private int layout; 

     public MyListAdapter(Context context, int resource, List<String> objects) { 
      super(context, resource, objects); 
      layout= resource; 
     } 

     @Override 
     public View getView(final int position, View convertView, ViewGroup parent) { 
      ViewHolder mainHolder= null; 
      if (convertView == null) { 
       LayoutInflater inflater = LayoutInflater.from(getContext()); 
       convertView= inflater.inflate(layout, parent, false); 
       ViewHolder viewHolder= new ViewHolder(); 
       viewHolder.item= (TextView) convertView.findViewById(R.id.itemText); 
       viewHolder.btn= (Button) convertView.findViewById(R.id.doneBtn); 
       viewHolder.btn.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         Toast.makeText(getContext(), itemArray.get(position), Toast.LENGTH_SHORT).show(); 
        } 
       }); 
       convertView.setTag(viewHolder); 
      } 
      else { 
       mainHolder= (ViewHolder) convertView.getTag(); 
       mainHolder.item.setText(getItem(position)); 
      } 

      return convertView; 
     } 

     public class ViewHolder { 
      TextView item; 
      Button btn; 
     } 
    } 

Спасибо за все! :)

ответ

0

но когда она имеет нормальный размер (layout_heigh = wrap_content)

Это очень плохая идея, используя ListView, придав ему height=wrap_content.
Это заставляет ListView измерять несколько детей из адаптера во время компоновки, чтобы знать, насколько это важно.
Вы можете проверить его самостоятельно, отлаживая метод getView() внутри адаптера.

В вашем случае, используя LinearLayout, просто добавьте верхнее поле (50dp в качестве кнопки) в свой списокView и используйте layout_heigh=match_parent.
В противном случае используйте RelativeLayout.

+0

Я сделал то, что вы предлагаете, и это не решает мою проблему :( – Noa

0

Измените свой список, чтобы занимать столько места, сколько возможно, учитывая высоту любого вида сестры (в данном случае ваша кнопка). Вот как это сделать с атрибутом android:layout_weight

<?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"> 

    <Button 
     android:layout_width="match_parent" 
     android:layout_height="50dp" 
     android:text="Add Task" 
     android:onClick="addTask" /> 

    <ListView android:id="@+id/myListView" 
       android:layout_width="wrap_content" 
       android:layout_height="0dp" 
       android:layout_weight="1" 
       android:drawSelectorOnTop="false"/> 

</LinearLayout> 
Смежные вопросы