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);
在主界面调用适配器