listviewitem高度不会更改为包装内容

时间:2011-11-08 06:25:20

标签: android listviewitem

我有listviewitem布局的列表活动。 listviewitem包含一个textview,问题是如果textview中的字符串太长 - 例如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 :(得分:0)

我认为您应该使用(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT)而不是(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT)。

答案 1 :(得分:0)

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

”注意:如果未严格指定父级的大小(例如,如果父级是ScrollView,则不能指定wrap_content,因为它也可以),则不能在XML中的ExpandableListView的android:layout_height属性中使用值wrap_content可以是任意长度。但是,如果ExpandableListView父级具有特定大小(例如100像素),则可以使用wrap_content。“