У меня есть список активности с макетом 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>