在android列表应用中我们通常会用到listView这个控件,她自带的几种适配器往往不能够满足我们日常开发中的需要,这里我们就必须自定义适配器来完成。(文笔不好,加上是新手,当给自己备份)
前写日子看了下360网盘顺便实现了一下他的一个页面。这里我采用了FileListAdapter自定义的一个适配器。注意---listView有时候会调用多次getView()方法往往是布局文件配置的问题改成fill_parent就ok
/** * 文件显示列表 显示文件夹 文件名 操作按钮 如果是文件 则还要显示文件的大小和更改时间 */ public class FileListAdapter extends BaseAdapter { private List<FileItem> files = null; // 数据源列表。自定义传入数据结构 private Context context; private int mresource; private LayoutInflater mInflater; public FileListAdapter(List<FileItem> files, int resource, Context context) { this.context = context; this.files = files; this.mresource = resource; this.mInflater = LayoutInflater.from(context); } public int getCount() { // 取得数据源的大小 return files.size(); } public FileItem getItem(int position) { // 得到position位置的List的一行 return files.get(position); } public long getItemId(int position) { return position; } /** * convertView 一个Item也就是当前定义的一行显示的样式 */ public View getView(int position, View convertView, final ViewGroup parent) { if (convertView == null) { convertView = mInflater.inflate(mresource, parent, false); } FileItem file = getItem(position); if (file == null) { return convertView; } ImageView fileImage = (ImageView) convertView .findViewById(R.id.file_item_icon); TextView fileItemText = (TextView) convertView .findViewById(R.id.file_item_text); TextView filetime = (TextView) convertView .findViewById(R.id.iv_file_item_filetime); TextView filesize = (TextView) convertView .findViewById(R.id.iv_file_item_filesize); int fileType = file.getFileType(); String fileName = file.getFileName(); setImageView(fileType, fileName, fileImage); setFileItemView(fileType, fileName, fileItemText); setFileSizeView(fileType, file.getFilesize(), filesize); setFileTimeView(fileType, file.getFiletime(), filetime); convertView.setBackgroundDrawable(convertView.getResources() .getDrawable(R.drawable.action_item_btn)); Button button = (Button) convertView.findViewById(R.id.file_item_btn); button.setBackgroundResource(R.drawable.file_operate); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { //点击右边button的popupwindow事件 View menuView = View.inflate(context, R.layout.menu_edit, null); ParamHandle param = new ParamHandle("bottomMenu", View.inflate(context, R.layout.bottom_menu, null)); List<ParamHandle> params = new ArrayList<ParamHandle>(); params.add(param); ListMenuPopWindow popWindow = new ListMenuPopWindow(v, menuView, LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT, params); popWindow.showToggle(); } }); return convertView; } private void setImageView(int fileType, String fileName, ImageView view) { if (fileType == 0) { view.setBackgroundResource(R.drawable.folder); } if (fileType == 1) { view.setBackgroundResource(R.drawable.folder_photo); } else { } } private void setFileItemView(int fileType, String fileName, TextView view) { view.setText(fileName); } private void setFileTimeView(int fileType, String filetime, TextView view) { if (fileType == 0 || fileType == 1) { view.setVisibility(View.GONE); } else { view.setText("修改时间:" + filetime); } } private void setFileSizeView(int fileType, int filesize, TextView view) { if (fileType == 0 || fileType == 1) { view.setVisibility(View.GONE); } else { view.setText(filesize); } }
其中的listItem的布局文件 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@id/file_item" android:layout_width="fill_parent" android:layout_height="@dimen/listview_item_height"> <ImageView android:id="@id/file_item_icon" android:layout_alignParentLeft="true" android:layout_marginLeft="@dimen/listview_item_img_margin_left" android:layout_centerVertical="true" android:layout_width="@dimen/listview_item_text_thumb_width" android:layout_height="@dimen/listview_item_text_thumb_width"/> <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginLeft="@dimen/listview_item_text_margin_left" android:layout_marginRight="@dimen/listview_item_text_margin_left" android:layout_toRightOf="@id/file_item_icon" android:layout_centerVertical="true"> <TextView android:id="@id/file_item_text" style="@style/file_name_sty" android:singleLine="true" android:ellipsize="middle" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="@dimen/listview_item_text_margin_top"> <TextView android:id="@id/iv_file_item_filesize" android:layout_width="wrap_content" android:layout_height="wrap_content" style="@style/file_desc_sty" android:visibility="gone"/> <TextView android:id="@id/iv_file_item_filetime" android:layout_width="wrap_content" android:layout_height="wrap_content" style="@style/file_desc_sty" android:visibility="gone"/> </LinearLayout> </LinearLayout> <Button android:id="@id/file_item_btn" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_alignParentRight="true" android:focusable="false"/> </RelativeLayout>
效果如下:
相关推荐
listview 自定义adapter的例子demo
安卓listview自定义adapter包括demo和一些其他自定义绑定的代码
Android ListView 自定义adapter好友列表
ListView自定义Adapter实现多视图Item
新手学习,listview自定义Adapter显示省名并配置item事件,通过自定义adapter显示省份,点击item用toast提示点击内容
listview自定义Adapter实现仿qq页面,内部代码有详细注释,
Android自定义adapter的listview代码
主要为大家详细介绍了android开发中ListView自定义adapter的封装,ListView的模板写法,感兴趣的小伙伴们可以参考一下
主要为大家详细介绍了ListView自定义Adapter实现仿QQ界面,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
ListView中使用自定义Adapter及时更新数据
Flutter学习之旅(六)----ListView控件自定义Adapter以及带参数跳转,博客对应地址:http://blog.csdn.net/zhangxiangliang2/article/details/76383244
Android之自定义Adapter的ListView
为便于学习自定义的Adapter,本案例的界面未进行美化,功能已经实现,对于其中的getView(int position,View view ,ViewGroup vg)做了数据的填充操作。本案例功能及其简单,只涉及ListView中自定义适配器,没有对...
根据CSDN鸿洋大神的博客自定义Adapter改写而成。可适应大多数的ListView和GridView的适配器需求~~
Android自定义Adapter的ListView的思路及代码,需要的朋友可以参考一下
简单的listview自定义适配器的使用方法,注释很清晰,也有对应的博文介绍
自定义Adapter实现多种Item视图的ListView
Android listview例子, 采用自定义Adapter:包含了Button控件