высота listviewitem не изменяется для переноса содержимого - PullRequest
1 голос
/ 08 ноября 2011

У меня есть список активности с макетом listviewitem. Элемент listview содержит текстовое представление, проблема в том, что если строка в текстовом представлении слишком длинная - например, 3 строки, то высота listviewitem не изменяется для переноса содержимого. Я использую адаптер для просмотра списка.

Проблема возникает только при вставке новых предметов с помощью адаптера !!!!!!

Вот макет и адаптер:

public class RecipeInstructionsListViewAdapter extends ArrayAdapter<Instruction> 
{
    private Context mContext;
    private ArrayList<Instruction> mItems;
    private LayoutInflater mInflater;

    public RecipeInstructionsListViewAdapter(Context context, int textViewResourceId,ArrayList<Instruction> items) 
    {
        super(context,textViewResourceId,items);

        mContext=context;
        mItems=items;

        mInflater=(LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    @Override
    public View getView(int position,View convertView,ViewGroup parent) 
    {
            ViewHolder holder = new ViewHolder();

        if(convertView == null) 
        {
                convertView =mInflater.inflate(R.layout.recipes_instruction_list_single_view_entry, null);
        }

          if( super.getItem(position) != null )
          {
              holder.instructionIndex   = (TextView) convertView.findViewById( R.id.listUp_RecipeInstructionNumberTextBoxId );
              holder.instructionText    = (TextView) convertView.findViewById( R.id.listUp_RecipeInstructioTextTextBoxId );
              holder.instructionImage   = (ImageView)convertView.findViewById( R.id.listUp_RecipeInstructionImageViewId );

              Typeface tf = Typeface.createFromAsset(mContext.getAssets(), "Eras_Bold.ttf");
              holder.instructionIndex.setTypeface(tf);
              holder.instructionIndex.setTextSize(30);
              holder.instructionIndex.setTextColor( GlobalDefs.GetHeadlineColor() );
              holder.instructionIndex.setText( Integer.toString(mItems.get(position).getIndex() ) );

              tf = Typeface.createFromAsset(mContext.getAssets(), "Arial.ttf");
              holder.instructionText.setTypeface(tf);
              holder.instructionText.setTextSize(14);
              holder.instructionText.setTextColor( Color.BLACK );
              holder.instructionText.setText( mItems.get(position).getText() );

              String imageLocation = mItems.get(position).GetInstructionImageLocation();
              if( imageLocation != null )
              {
                  holder.instructionImage.setImageURI( Uri.parse( imageLocation ) );
                  holder.instructionImage.setVisibility( View.VISIBLE );
              }
              else
              {
                  holder.instructionImage.setVisibility( View.GONE );
              }

              convertView.setTag(holder);
              convertView.setLayoutParams( new ListView.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
          } 
          else 
          {
          }

          return convertView;
    }

    @Override
    public boolean isEnabled(int position) 
    {
        return true;
    }

    static class ViewHolder 
    {
          TextView  instructionIndex;
          TextView  instructionText;
          ImageView instructionImage;
    }
}

XML:

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

    <TextView
        android:id="@+id/listUp_RecipeInstructionNumberTextBoxId"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true" 
        android:layout_alignParentLeft="true"
        android:textSize="30dip" />

    <ImageView
        android:layout_height="19dp" 
        android:layout_width="19dp" 
        android:id="@+id/listUp_RecipeInstructionImageViewId" 
        android:layout_alignParentTop="true" 
        android:layout_alignParentRight="true" 
        android:layout_marginRight="19dp" />

    <TextView
        android:id="@+id/listUp_RecipeInstructioTextTextBoxId"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true" 
        android:layout_toRightOf="@+id/listUp_RecipeInstructionNumberTextBoxId"
        android:layout_marginLeft="15dp"
        android:textSize="14dip" />

</LinearLayout>

Ответы [ 2 ]

0 голосов
/ 06 апреля 2019

https://developer.android.com/reference/android/widget/ExpandableListView.html

"Примечание. Нельзя использовать значение wrap_content для атрибута android: layout_height ExpandableListView в XML, если размер родителя также не указан строго (например, если родительский объект был ScrollViewВы не можете указать wrap_content, поскольку он также может иметь любую длину. Однако вы можете использовать wrap_content, если родительский элемент ExpandableListView имеет определенный размер, например 100 пикселей. "

0 голосов
/ 08 ноября 2011

Я думаю, что вы должны использовать (LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT) вместо (LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT).

...