基于Android的开发项目中Adapter的用法

        adapter就是“适配器”,适配器是一种设计模式,它允许不兼容的接口之间进行交互。适配器将一个类的接口转换成客户端所期望的另一个接口。它通常用于解决两个现有接口之间不兼容的问题,使它们能够协同工作。适配器模式可以通过继承或组合来实现。

       比如我们在淘宝或者京东所看到的一些商品信息等,都是使用了适配器,通俗来说,适配器的作用就是将我们想显示到界面上的信息,按照一个固定的布局格式显示。

基本的步骤包括:1.在主界面的布局文件中创建一个<listview>标签;2.在创建一个单独的布局文件表示你想要显示内容的框架;3.创建一个用于添加数据的布局文件;4.创建一个适配器类(myadapter)继承baseadapter或者其他的适配器类;5.从数据端传输数据给适配器;6.通过适配器将用户输入的内容按照自己定义的框架显示在主界面上。

1.在主界面的布局文件中创建一个<listview>标签

<ListView
    android:id="@+id/listview"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:dividerHeight="2dp"
    android:divider="#a41c9d"
    android:headerDividersEnabled="false"/>

这个是为了用列表的方式在主界面按照自己设定的框架显示你输入的内容

2.在创建一个单独的布局文件表示你想要显示内容的框架

你想要让内容以什么形式展示出来,就定义成哪种形式的框架,以下用一个通讯录框架进行演示

<ImageView
    android:id="@+id/img"
    android:layout_width="70dp"
    android:layout_height="70dp" />
<LinearLayout
    android:orientation="vertical"
    android:layout_width="160dp"
    android:layout_weight="1"
    android:layout_height="70dp">
    <TextView
        android:id="@+id/name"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:text="姓名"
        android:textSize="24dp"/>
    <TextView
        android:id="@+id/number"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:layout_marginTop="7dp"
        android:text="电话"
        android:textSize="20dp"/>
</LinearLayout>
<Button
    android:layout_width="75dp"
    android:layout_height="70dp"
    android:focusable="false"
    android:id="@+id/button_massages"
    android:background="@drawable/u" />
<Button
    android:layout_width="75dp"
    android:layout_height="70dp"
    android:focusable="false"
    android:id="@+id/button_call"
    android:background="@drawable/ku" />

3.创建一个用于添加数据的布局文件

<ImageButton
    android:id="@+id/img"
    android:layout_width="100dp"
    android:layout_height="100dp"
    android:layout_gravity="center"
    android:layout_marginTop="24dp"
    android:src="@drawable/touxiang"
    android:scaleType="fitCenter"
    android:background="#27837676"/>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:layout_marginTop="10dp">

    <TextView
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="50dp"
        android:gravity="center|right"
        android:text="姓名"
        android:textSize="22dp"/>

    <EditText
        android:id="@+id/edit_name"
        android:layout_width="0dp"
        android:layout_weight="4"
        android:layout_height="50dp"
        android:layout_marginLeft="10dp"
        android:lines="1"/>
</LinearLayout>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:layout_marginTop="15dp">
    <TextView
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="50dp"
        android:gravity="center|right"
        android:text="电话"
        android:textSize="22dp"/>

    <EditText
        android:id="@+id/edit_nubmer"
        android:layout_width="0dp"
        android:layout_weight="4"
        android:layout_height="50dp"
        android:layout_marginLeft="10dp"
        android:inputType="phone"
        android:lines="1"/>
</LinearLayout>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:layout_marginTop="15dp">
    <TextView
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="50dp"
        android:gravity="center|right"
        android:text="邮件"
        android:textSize="22dp"/>

    <EditText
        android:id="@+id/edit_Email"
        android:layout_width="0dp"
        android:layout_weight="4"
        android:layout_height="50dp"
        android:layout_marginLeft="10dp"
        android:lines="1"/>
</LinearLayout>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:layout_marginTop="15dp">
    <TextView
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="50dp"
        android:gravity="center|right"
        android:text="Q  Q"
        android:textSize="22dp"/>

    <EditText
        android:id="@+id/qq"
        android:layout_width="0dp"
        android:layout_weight="4"
        android:layout_height="50dp"
        android:layout_marginLeft="10dp"
        android:lines="1"/>
</LinearLayout>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:layout_marginTop="15dp">
    <TextView
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="50dp"
        android:gravity="center|right"
        android:text="地址"
        android:textSize="22dp"/>

    <EditText
        android:id="@+id/edit_adress"
        android:layout_width="0dp"
        android:layout_weight="4"
        android:layout_height="50dp"
        android:layout_marginLeft="10dp"
        android:lines="1"/>
</LinearLayout>
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:layout_marginTop="15dp">
    <TextView
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="50dp"
        android:gravity="center|right"
        android:text="备注"
        android:textSize="22dp"/>

    <EditText
        android:id="@+id/edit_bei"
        android:layout_width="0dp"
        android:layout_weight="4"
        android:layout_height="50dp"
        android:layout_marginLeft="10dp"
        android:lines="1"/>
</LinearLayout>


<Button
    android:id="@+id/add_modify"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="30dp"
    android:layout_gravity="center"
    android:background="#e5a7e634"
    android:text="添加" />

4.创建一个适配器类(myadapter)继承baseadapter或者其他的适配器类

public class MyAdapter extends BaseAdapter{
    public Context context;
    public LinkedList<Data> datas;
    public MyAdapter(){

    }
    public MyAdapter(Context context,LinkedList<Data> datas){
        this.context=context;
        this.datas=datas;
    }
    @Override
    public int getCount() {
        return datas.size();
    }

    @Override
    public Object getItem(int position) {
        return datas.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        ViewHoder viewHoder=null;
        if(convertView==null){
     convertView=LayoutInflater.from(context).inflate(R.layout.list_item,parent,false);
        
            viewHoder=new ViewHoder();
            viewHoder.image= (ImageView) convertView.findViewById(R.id.img );
            viewHoder.name= (TextView) convertView.findViewById(R.id.name);
            viewHoder.number= (TextView) convertView.findViewById(R.id.number);
           
            convertView.setTag(viewHoder);
        }else {
            viewHoder= (ViewHoder) convertView.getTag();
        }
        viewHoder.image.setImageBitmap(datas.get(position).bitmap);
        viewHoder.name.setText(datas.get(position).name);
        viewHoder.number.setText(datas.get(position).number);
return convertView;

}

public class ViewHoder{
    ImageView image;
    TextView name;
    TextView number;
}
convertView= LayoutInflater.from(context).inflate(R.layout.list_item,parent,false);这句代码的意思是,定义一个convertview视图,让该视图等于你自己定义的内容框架,

viewHoder.image= (ImageView) convertView.findViewById(R.id.img );

viewHoder.name= (TextView) convertView.findViewById(R.id.name);

viewHoder.number= (TextView) convertView.findViewById(R.id.number);

分别获取自定义内容框架上各个视图的id,并且与自定义viewhoder类中的属性进行绑定,从数据接口传进来数据,再将数据赋值给各个视图。

5.从数据端传输数据给适配器

public void initview() {
    edit_name = (EditText) findViewById(R.id.edit_name);
    edit_number = (EditText) findViewById(R.id.edit_nubmer);
    edit_emile = (EditText) findViewById(R.id.edit_Email);
    edit_qq = (EditText) findViewById(R.id.qq);
    edit_adress = (EditText) findViewById(R.id.edit_adress);
    edit_bei = (EditText) findViewById(R.id.edit_bei);
    img = (ImageButton) findViewById(R.id.img);
    button = (Button) findViewById(R.id.add_modify);
}

获取数据端的各个数据的id

Intent intent = new Intent();
intent.putExtra("姓名", edit_name.getText().toString());
intent.putExtra("电话", edit_number.getText().toString());
intent.putExtra("邮件", edit_emile.getText().toString());
intent.putExtra("QQ", edit_qq.getText().toString());
intent.putExtra("地址", edit_adress.getText().toString());
intent.putExtra("备注", edit_bei.getText().toString());

//intent.putExtra("图片",bitmap);
setResult(RESULT_OK, intent);
finish();

获取输入的数据内容,并返回主界面

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    switch (requestCode) {
        case 1:
            if (resultCode == RESULT_OK) {
                String s1 = data.getStringExtra("姓名");
                String s2 = data.getStringExtra("电话");
                String s3 = data.getStringExtra("邮件");
                String s4 = data.getStringExtra("QQ");
                String s5 = data.getStringExtra("地址");
                String s6 = data.getStringExtra("备注");
                //Bitmap bitmap=data.getParcelableExtra("图片");
                Bitmap bitmap = TransBitmap.getBitmap();
                myAdapter.add(new Data(bitmap, s1, s2,s3,s4,s5,s6));
            }
            break;

在主界面中接受从数据端传回来的数据,并把数据全部给到适配器

6.通过适配器将用户输入的内容按照自己定义的框架显示在主界面上。

myAdapter=new MyAdapter(context,datas);
listView.setAdapter(myAdapter);

在主界面调用适配器

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

托马斯家的

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值