【问题标题】:listviewitem height does not change to wrap contentlistviewitem 高度不会更改以换行内容
【发布时间】:2011-11-08 06:25:19
【问题描述】:

我有一个带有 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>

【问题讨论】:

    标签: android listviewitem


    【解决方案1】:

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

    【讨论】:

    • 不起作用...这是一个棘手的问题...仅当我将新项目插入其中时才会发生。如果用字符串初始化适配器 - 它的工作完美......
    【解决方案2】:

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

    "注意:如果父级的大小也没有严格指定(例如,如果父级是 ScrollView,则不能指定 wrap_content,因为它也可以可以是任意长度。但是,如果 ExpandableListView 父级具有特定大小(例如 100 像素),则可以使用 wrap_content。"

    【讨论】:

      猜你喜欢
      • 2022-08-19
      • 2016-05-30
      • 2014-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-06
      • 1970-01-01
      相关资源
      最近更新 更多