您的位置:首页 > 其它

自定义Adapter的listview(很重要)

2015-08-30 17:05 260 查看
首先介绍下MVC:M就是modle,V是view,C是control
把数据通过适配器适配一定格式后,给listview输出
listview相当于一个空的架子,把格式化的数据放出来
LayoutInflater跟findById很像,只是findById是找的控件,LayoutInflater找的是xml文件
自定义流程:
1) mainactivity运行本身的布局文件和listview.setadapter启动adapter,adapter要映射 数据 到 布局
2) 要找到布局要用LayoutInflater,要找数据需要从Student类中取写到mData里(图片也是属性之一)
3) LayoutInflater在适配器中不能写所以在mainactivity中写好了再用构造器传过去,同时还传了mData,而mData中的数据是Student类型的List,需要初始化就创建了一个方法写这个叫mData的List,写完一起传给了自定义的adapter,然后这个adapter把得来的数据按照布局文件个格式一顿封装传给listview摆上
listview有3个给出的适配器ArrayAdapter、SimpleAdapter和SimpleCursorAdapter,但是都是应经固定好的,不能更精确
解析自定义adapter的listview
1)数据集,即要映射的字符串、图片信息之类。
2)适配器,实现把要映射的字符串、图片信息映射成视图(如Textview、Image等组件)《其实就是布局文件,也就是自定义的适配格式》,再添加到ListView中。
写一个Student类做数据源
/**
 * Created by litoo on 2015/8/24.
 */
public class Student {
private String name;
private String sex;
private String hobby;
private int img;
public Student(String name,String sex, String hobby,int img){
        this.name=name;
        this.sex=sex;
        this.img=img;
        this.hobby=hobby;
    }
public void setImg(int img) {
        this.img = img;
    }

public int getImg() {
        return img;
    }
public void setHobby(String hobby) {
        this.hobby = hobby;
    }

public String getHobby() {
        return hobby;
    }
public void setName(String name) {
                this.name = name;
    }
public void setSex(String sex) {
            this.sex = sex;
    }
public String getSex() {
            return sex;
    }
public String getName() {
            return name;
    }
}

mainactivity
public class MainActivity extends Activity{
private ListView mListView;
private List<Student> mData;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
        setContentView(R.layout.imgview_activity);
mListView= (ListView) findViewById(R.id.list_itemmm);//mainactivity运行关联的布局文件,通过id找到listview
        LayoutInflater inflater=getLayoutInflater();//传入Layoutinflater,在适配器中不能写,所以在这写好用构造器传过去
gettData();                          //初始化mData,写了一个方法,把人装进List
Studentadapter studentadapter=new Studentadapter(inflater,mData);//调用构造器
mListView.setAdapter(studentadapter);
   }
private void gettData() {
        mData=new ArrayList<>();
        mData.add(new Student("张三","男","爱好篮球",R.mipmap.luckdog));//用student的构造器把4                                                                                                                                    个student装进mData
        mData.add(new Student("李四","男","爱好足球",R.mipmap.luckdog));
        mData.add(new Student("王五","男","爱好游戏",R.mipmap.luckdog));
        mData.add(new Student("赵六","男","爱好睡觉",R.mipmap.luckdog));
    }
}
自定义adapter继承自BaseAdapter(一个抽象类)

/**
 * Created by litoo on 2015/8/24.
 */
public class Studentadapter extends BaseAdapter{
private List<Student> mData;
private LayoutInflater minflater;
public Studentadapter(LayoutInflater inflater,List<Student> data){
        minflater=inflater;
        mData=data;
    }
@Override
public int getCount() {
//适配器是用来往listview传数据的,所以数据有多少条就返回多少
return mData.size();
    }
@Override
public Object getItem(int position) {
//用于返回这一行的数据,一般情况下只需要返回索引就能找到
return position;
    }
@Override
public long getItemId(int position) {
return position;//要不要这行数据来个id,返回索引
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
        View view=minflater.inflate(R.layout.simple_adpter,null);
//固定写法
Student student=mData.get(position);                  //把student从List里面挨个读出来,按照布局分好返回这个视图给listview显示
        ImageView imageview= (ImageView) view.findViewById(R.id.image_photo);
        TextView textview_name= (TextView) view.findViewById(R.id.text_name);
        TextView textview_sex= (TextView) view.findViewById(R.id.text_sex);
        TextView textview_hobby= (TextView) view.findViewById(R.id.text_hobby);
        textview_name.setText(student.getName());
        textview_sex.setText(student.getSex());
        textview_hobby.setText(student.getHobby());
        imageview.setImageResource(student.getImg());
return view;
    }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: