Android Listview项目部分可见
我使用ViewHolder创建了一个自定义Listview适配器,并将其与ListFragment一起使用,由于某些原因我不知道,最后一个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
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,我的活动相对视图构建得很差。修复了它..谢谢