Android Listview项目部分可见

Android Listview项目部分可见,android,listview,Android,Listview,我使用ViewHolder创建了一个自定义Listview适配器,并将其与ListFragment一起使用,由于某些原因我不知道,最后一个Listview项没有完全呈现 适配器代码 public class ListViewAdapter extends ArrayAdapter<ListItem> { public ListViewAdapter(Context context, List<ListItem> items) { super(context, R

我使用ViewHolder创建了一个自定义Listview适配器,并将其与ListFragment一起使用,由于某些原因我不知道,最后一个Listview项没有完全呈现

适配器代码

public class ListViewAdapter extends ArrayAdapter<ListItem> {

public ListViewAdapter(Context context, List<ListItem> items) {
    super(context, R.layout.row, items);
}

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

    if(convertView == null) {
        LayoutInflater inflater = LayoutInflater.from(getContext());

            viewHolder = new ViewHolder();
            viewHolder.ivIcon = (ImageView) convertView.findViewById(R.id.ivIcon);
            viewHolder.tvTitle = (TextView) convertView.findViewById(R.id.tvTitle);
            viewHolder.tvDescription = (TextView) convertView.findViewById(R.id.tvDescription);
            convertView.setTag(viewHolder);



    } else {
        // recycle the already inflated view
        viewHolder = (ViewHolder) convertView.getTag();
    }

    // update the item view
    ListItem item = getItem(position);
    if(item!=null){
        viewHolder.ivIcon.setImageDrawable(item.icon);
        viewHolder.tvTitle.setText(item.title);
        viewHolder.tvDescription.setText(item.description);
    }


    return convertView;
}

/**
 * The view holder design pattern prevents using findViewById()
 * repeatedly in the getView() method of the adapter.
 *
 * @see http://developer.android.com/training/improving-layouts/smooth-scrolling.html#ViewHolder
 */
private static class ViewHolder {
    ImageView ivIcon;
    TextView tvTitle;
    TextView tvDescription;
}
}
公共类ListViewAdapter扩展了ArrayAdapter{
公共ListViewAdapter(上下文、列表项){
超级(上下文、右布局、行、项);
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
持票人持票人;
if(convertView==null){
LayoutInflater充气器=LayoutInflater.from(getContext());
viewHolder=新的viewHolder();
viewHolder.ivIcon=(ImageView)convertView.findViewById(R.id.ivIcon);
viewHolder.tvTitle=(TextView)convertView.findViewById(R.id.tvTitle);
viewHolder.tvDescription=(TextView)convertView.findViewById(R.id.tvDescription);
convertView.setTag(viewHolder);
}否则{
//回收已膨胀的视图
viewHolder=(viewHolder)convertView.getTag();
}
//更新项目视图
ListItem=getItem(位置);
如果(项!=null){
viewHolder.ivIcon.setImageDrawable(item.icon);
viewHolder.tvTitle.setText(item.title);
viewHolder.tvDescription.setText(item.description);
}
返回视图;
}
/**
*视图保持架设计模式阻止使用findViewById()
*在适配器的getView()方法中重复。
*
*@见http://developer.android.com/training/improving-layouts/smooth-scrolling.html#ViewHolder
*/
私有静态类视图持有者{
ImageView-ivIcon;
文本视图标题;
文本视图描述;
}
}
布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:gravity="center_vertical"
android:background="@color/frame_background"
android:padding="5dp" >

<!-- the innner view - provides the white rectangle -->
<RelativeLayout android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/frame" >

    <!-- the icon view -->
    <ImageView android:id="@+id/ivIcon"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="5dp"
        android:contentDescription="desc"
        android:scaleType="fitXY"
        android:layout_alignParentLeft="true"
        android:src="@mipmap/ic_launcher" />

    <!-- the container view for the title and description -->
    <RelativeLayout android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@id/ivIcon"
        android:layout_centerVertical="true" >

        <!-- the title view -->
        <TextView android:id="@+id/tvTitle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="@android:style/TextAppearance.Medium" />

        <!-- the description view -->
        <TextView android:id="@+id/tvDescription"
            android:layout_below="@id/tvTitle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="@android:style/TextAppearance.Small"
            android:padding="3dp" />
    </RelativeLayout>

</RelativeLayout>

还有片段代码,因为我使用的是ListFragment

Public class IntroFragment extends ListFragment {
private List<ListItem> mItems;        // ListView items list

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // initialize the items list
    mItems = new ArrayList<ListItem>();
    Resources resources = getResources();
    String[] factfiles=resources.getStringArray(R.array.SunFacts);
  mItems.add(new ListItem(resources.getDrawable(R.mipmap.ic_launcher), factfiles[i], factfiles[i])); }


    // initialize and set the list adapter
    setListAdapter(new ListViewAdapter(getActivity(), mItems));
}

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    // remove the dividers from the ListView of the ListFragment
    getListView().setDivider(null);
}

@Override
public void onListItemClick(ListView l, View v, int position, long id) {
    // retrieve theListView item
    ListItem item = mItems.get(position);

    // do something
    Toast.makeText(getActivity(), item.title, Toast.LENGTH_SHORT).show();
}
}
Public类IntroFragment扩展了ListFragment{
私有列表mItems;//ListView项目列表
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
//初始化项目列表
mItems=新的ArrayList();
Resources=getResources();
String[]factfiles=resources.getStringArray(R.array.SunFacts);
add(新列表项(resources.getDrawable(R.mipmap.ic_启动器)、factfiles[i]、factfiles[i]);)
//初始化并设置列表适配器
setListAdapter(新的ListViewAdapter(getActivity(),mItems));
}
@凌驾
已创建视图上的公共void(视图,捆绑保存状态){
super.onViewCreated(视图,savedInstanceState);
//从ListFragment的ListView中删除分隔符
getListView().setDivider(null);
}
@凌驾
public void onListItemClick(列表视图l、视图v、整数位置、长id){
//检索ListView项
ListItem item=mItems.get(位置);
//做点什么
Toast.makeText(getActivity(),item.title,Toast.LENGTH_SHORT).show();
}
}
下面的屏幕截图显示了我的意思,请注意底部新Listview项的白色边缘, 并且listview将不再滚动。


提前感谢..这已经让我疲惫不堪..

请更新包含ListView的xml代码请发布将片段添加到容器的代码,并发布容器的xml。找到罪魁祸首@HradeshKumar,我的活动相对视图构建得很差。修复了它..谢谢