Android开发笔记之Adapter用法
来源:互联网 发布:winxp升级win7软件 编辑:程序博客网 时间:2024/06/07 22:19
Adapter的概念
适配器对象作为视图和该视图的基础数据之间的桥梁。适配器提供对数据项的访问。适配器还负责对数据集中的每个项目进行视图的视图。
三个要素:
Data—连接—Adapter—连接—View
Adapter接口的继承关系如下图:
重写 getView()方法的工作原理:
1.ListView 向 Adapter 对于List中的每一条数据索要一个View ,“give me a view” (getView)。
2.一个新的View 返回并且展示。
但是出现下面的情况,系统内存无法满足,*ListView里面的条目过多,例如 ,100000万条。其中只有可见的项目存在内存中,其他的在Recycler中。其实我的理解Recyler就是一个队列,用来存储不在屏幕范围内的item,如果item滚出屏幕范围,那么就入队,这里的滚出是完全滚出,即边界等也要完全滚出。如果新的item要滚进来,那么android系统的framework就会查看Recyler是否含有可以重复使用的iew,如果有那么就重新设置该iew 的数据源,然后显示,即出队。
常用的Adapter实现的类有:
(1)ArrayAdapter,支持泛型,可以展示一行字符串。
ArrayAdapterDemo:
使用系统自带的android.R.layout.simple_list_item_1布局文件。
MainActivity.java文件
package edu.jnu.adapterdemo;import android.app.Activity;import android.content.Context;import android.net.Uri;import android.os.Bundle;import android.support.design.widget.FloatingActionButton;import android.support.design.widget.Snackbar;import android.support.v7.app.AppCompatActivity;import android.support.v7.widget.Toolbar;import android.util.Log;import android.view.View;import android.view.Menu;import android.view.MenuItem;import android.view.ViewGroup;import android.widget.AdapterView;import android.widget.ArrayAdapter;import android.widget.BaseAdapter;import android.widget.ListView;import android.widget.SimpleAdapter;import android.widget.TextView;import android.widget.Toast;import com.google.android.gms.appindexing.Action;import com.google.android.gms.appindexing.AppIndex;import com.google.android.gms.common.api.GoogleApiClient;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;public class MainActivity extends Activity { private ListView listView; private List<String> list; private ArrayAdapter arrayAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listView = (ListView) findViewById(R.id.listView); list = new ArrayList<String>(); for (int i = 1; i < 100; i++) { list.add("item" + i); } arrayAdapter = new ArrayAdapter(this,android.R.layout.simple_list_item_1,list); listView.setAdapter(arrayAdapter); }}
lv_layout.xml文件
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent"> <ImageView android:id="@+id/img" android:layout_width="60dp" android:layout_height="60dp" android:layout_margin="5dp" /> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" > <TextView android:id="@+id/text1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="22sp" /> <TextView android:id="@+id/text2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="12sp"/> </LinearLayout></LinearLayout>
MainActivity.java文件
package edu.jnu.adapterdemo;import android.app.Activity;import android.content.Context;import android.net.Uri;import android.os.Bundle;import android.support.design.widget.FloatingActionButton;import android.support.design.widget.Snackbar;import android.support.v7.app.AppCompatActivity;import android.support.v7.widget.Toolbar;import android.util.Log;import android.view.View;import android.view.Menu;import android.view.MenuItem;import android.view.ViewGroup;import android.widget.AdapterView;import android.widget.ArrayAdapter;import android.widget.BaseAdapter;import android.widget.ListView;import android.widget.SimpleAdapter;import android.widget.TextView;import android.widget.Toast;import com.google.android.gms.appindexing.Action;import com.google.android.gms.appindexing.AppIndex;import com.google.android.gms.common.api.GoogleApiClient;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;public class MainActivity extends Activity implements AdapterView.OnItemClickListener { private ListView listView; private List<String> list; private SimpleAdapter simpleAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listView = (ListView) findViewById(R.id.listView); list = new ArrayList<String>(); for (int i = 1; i < 100; i++) { list.add("item" + i); } simpleAdapter = new SimpleAdapter(this,getdata(),R.layout.lv_layout, new String[]{"title","info","image"}, new int[]{R.id.text1,R.id.text2,R.id.img}); listView.setAdapter(simpleAdapter); listView.setOnItemClickListener(this); } private List<Map<String,Object>> getdata(){ List<Map<String,Object>> list = new ArrayList<Map<String,Object>>(); Map<String,Object> map = new HashMap<String,Object>(); map.put("title","Title1"); map.put("info","Info1"); map.put("image",R.drawable.i1); list.add(map); map = new HashMap<String,Object>(); map.put("title","Title2"); map.put("info","Info2"); map.put("image",R.drawable.i1); list.add(map); map = new HashMap<String,Object>(); map.put("title","Title3"); map.put("info","Info3"); map.put("image",R.drawable.i1); list.add(map); return list; } @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Toast.makeText(this,"pos:"+position,Toast.LENGTH_SHORT).show(); }}
(3).BaseAdapter:可以对ListView的性能进行优化,通过重写GetView方法。
采用ViewHolder模式。
lv_layout.xml文件
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent"> <ImageView android:id="@+id/img" android:layout_width="60dp" android:layout_height="60dp" android:layout_margin="5dp" android:layout_weight="1" /> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" android:layout_weight="4" > <TextView android:id="@+id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="22sp" /> <TextView android:id="@+id/info" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="12sp"/> </LinearLayout> <Button android:id="@+id/imgbtn" android:layout_width="60dp" android:layout_height="60dp" android:layout_margin="5dp" android:background="@drawable/selector" android:gravity="right" /></LinearLayout>
package edu.jnu.adapterdemo;import android.widget.Button;import android.widget.ImageView;import android.widget.TextView;/** * Created by roly on 16/6/28. */final public class ViewHolder { public ImageView imageView; public TextView title; public TextView info; public Button viewBtn;}
MyAdapter.java文件
package edu.jnu.adapterdemo;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.Button;import android.widget.ImageView;import android.widget.TextView;/** * Created by roly on 16/6/28. */class MyAdapter extends BaseAdapter { private MainActivity mainActivity; private LayoutInflater layoutInflater; public MyAdapter(MainActivity mainActivity, Context context) { this.mainActivity = mainActivity; this.layoutInflater = LayoutInflater.from(context); } @Override public int getCount() { return mainActivity.mData.size(); } @Override public Object getItem(int position) { return mainActivity.mData.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder = null; if (convertView == null) { viewHolder = new ViewHolder(); convertView = layoutInflater.inflate(R.layout.lv_layout, null); viewHolder.imageView = (ImageView) convertView.findViewById(R.id.img); viewHolder.title = (TextView) convertView.findViewById(R.id.title); viewHolder.info = (TextView) convertView.findViewById(R.id.info); viewHolder.viewBtn = (Button) convertView.findViewById(R.id.imgbtn); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } viewHolder.imageView.setBackgroundResource((Integer) mainActivity.mData.get(position).get("image")); viewHolder.title.setText((String) mainActivity.mData.get(position).get("title")); viewHolder.info.setText((String) mainActivity.mData.get(position).get("info")); viewHolder.viewBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mainActivity.showInfo(); } }); return convertView; }}
MainActivity.java文件
package edu.jnu.adapterdemo;import android.app.Activity;import android.app.AlertDialog;import android.content.DialogInterface;import android.os.Bundle;import android.widget.ListView;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;public class MainActivity extends Activity { private ListView listView; List<Map<String,Object>> mData; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listView = (ListView) findViewById(R.id.listView); mData = getdata(); MyAdapter adapter = new MyAdapter(this, this); listView.setAdapter(adapter); } //数据源 public List<Map<String,Object>> getdata(){ List<Map<String,Object>> list = new ArrayList<Map<String,Object>>(); Map<String,Object> map = new HashMap<String,Object>(); map.put("title","Title1"); map.put("info","Info1"); map.put("image",R.drawable.i1); list.add(map); map = new HashMap<String,Object>(); map.put("title","Title2"); map.put("info","Info2"); map.put("image",R.drawable.i2); list.add(map); map = new HashMap<String,Object>(); map.put("title","Title3"); map.put("info","Info3"); map.put("image",R.drawable.i3); list.add(map); return list; } public void showInfo(){ new AlertDialog.Builder(this) .setTitle("Alert") .setMessage("Introduce") .setPositiveButton("ok",new DialogInterface.OnClickListener(){ @Override public void onClick(DialogInterface dialog, int which) { } }) .show(); }}
项目源码:
http://download.csdn.net/detail/ymmqwe/9562334
0 0
- Android开发笔记之Adapter用法
- Android开发之 。。各种Adapter的用法
- Android之Adapter用法
- Android之Adapter用法
- Android笔记之Adapter
- Android开发之adapter
- Adapter---Android之Adapter用法总结
- Android之Adapter用法总结
- Android之Adapter用法总结
- Android之Adapter用法总结
- Android之Adapter用法总结
- Android之Adapter用法总结
- Android之Adapter用法总结
- Android之Adapter用法总结
- Android之Adapter用法总结
- Android之Adapter用法总结
- Android之Adapter用法总结
- Android之Adapter用法总结
- Hadoop安装
- matlab-高数 对于已知的函数画图(二维) 绝对值函数
- svn svn_uri_basename: Assertion `svn_uri_is_canonical(uri, ((void *)0))' failed.
- 《Java JD7 学习笔记》课后练习题1
- 资源数据库 AssetDatabase
- Android开发笔记之Adapter用法
- 哈希码托管从想法到产品
- matlab-高数 对于已知的函数画图(二维) 符号函数
- 访问者模式(Visitor)
- 从0开始学习GitHub系列
- matlab-高数 对于已知的函数画图(二维)取整函数向0去取整
- Word Ladder
- matlab-高数 对于已知的函数画图(二维)分段函数
- hdu 4515 小Q系列故事——世界上最遥远的距离(模拟)