1

I have a list activity with listviewitem layout. The listviewitem contains a textview, the porblem is that if the string in the textview is too long - e.g. 3 lines, then the listviewitem height does not change to wrap the content. I am using adapter for the listview.

The problem happens only when inserting new items using the adapter!!!!!!

Here are the layout and the adapter:

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>
Yoav
  • 635
  • 2
  • 11
  • 29

2 Answers2

0

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

"Note: You cannot use the value wrap_content for the android:layout_height attribute of a ExpandableListView in XML if the parent's size is also not strictly specified (for example, if the parent were ScrollView you could not specify wrap_content since it also can be any length. However, you can use wrap_content if the ExpandableListView parent has a specific size, such as 100 pixels."

RUSKIED
  • 39
  • 1
  • 2
  • 8
0

I think you should use (LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT) instead of (LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT).

himanshu
  • 1,990
  • 3
  • 18
  • 36
  • Does not work... Its a tricky question... It happens only when I insert a new item into it. If init the adapter with strings - its works perfect... – Yoav Nov 08 '11 at 07:39
  • found the following post http://stackoverflow.com/questions/2197744/android-textview-text-not-getting-wrapped – Yoav Nov 08 '11 at 12:02