android自定义Adapter
在ListView,GridView。。。。中经常用到适配器Adapter,但是anroid 提供的Adapter只是几种框架,如果我们有需求,还是要自己根据需求而自定义Adapter的
android提供的三种Adapter主要有ArrayAdapter,SimpleAdapter,SimpleCursorAdapter,ArraAdapter是简单的字符串适配器(很丑,因为没办法帅。。。),SimpleAdapter是可以自定义子View布局的,可以有图片(只限于本地图片,如果要用网络加载图片,请参考我之前的一篇Blog),SimpleCursorAdapter主要用于数据库,前两个的数据来源一般都是String[]或者List,后一个的数据来源一般是数据库查询得到的Cursor
而我们自定义用的最多的还是继承自SimpleAdapter,下面说一下具体用法
我还是连着上一篇Blog,想做一个显示带下载进度条的子View显示于ListView中,SimpleAdapter可以显示一般的图片,但是无法显示进度条(因为不只是要显示,还要有实时更新),所以我们的做法是继承SimpleAdapter,具体要复写的方法有4个:
public int getCount()
public Object getItem(int position)
public long getItemId(int position)
public View getView(int position, View convertView, ViewGroup parent)
还有一个更重要的是其构造方法MyAdapter(Context context, List
import java.util.List; import java.util.Map; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.LinearLayout; import android.widget.ProgressBar; import android.widget.TextView; public class MyAdapter extends BaseAdapter { private Context context; private LayoutInflater layoutInflater; private List> list; //构造方法,参数list传递的就是这一组数据的信息 public MyAdapter(Context context, List> list) { this.context = context; layoutInflater = LayoutInflater.from(context); this.list = list; } //得到总的数量 public int getCount() { // TODO Auto-generated method stub return this.list!=null? this.list.size(): 0 ; } //根据ListView位置返回View public Object getItem(int position) { // TODO Auto-generated method stub return this.list.get(position); } //根据ListView位置得到List中的ID public long getItemId(int position) { // TODO Auto-generated method stub return position; } //根据位置得到View对象 public View getView(int position, View convertView, ViewGroup parent) { if(convertView == null) { convertView = layoutInflater.inflate(R.layout.item, null); } //得到条目中的子组件 TextView tv1 = (TextView)convertView.findViewById(R.id.nameTextView); ProgressBar pb = (ProgressBar)convertView.findViewById(R.id.sizeProgressBar); TextView tv2 = (TextView)convertView.findViewById(R.id.sizeTextView); //从list对象中为子组件赋值 tv1.setText(list.get(position).get("name").toString()); pb.setProgress(Integer.parseInt(list.get(position).get("size").toString())); tv2.setText(list.get(position).get("size").toString()); return convertView; } }
更多相关文章
- Android(安卓)TabLayout 结合ViewPager实现标签页切换
- Android(安卓)Camera 二 JNI JAVA和C/CPP图像数据传输流程分析
- Android(安卓)官方架构组件(一)——Lifecycle
- Android基于Http协议实现文件上传功能的方法
- 倒计时效果
- SDK is not loaded yet解决方法
- 【Android】原生Progress提示
- EditText焦点自动带出软键盘问题
- #Retrofit 入门--Part 1