一级优化示例:
public class MyAdapter extends BaseAdapter {
List<Map<String, Object>> list;
LayoutInflater inflater;
public MyAdapter(Context context) {
this.inflater = LayoutInflater.from(context);
}
public void setList(List<Map<String, Object>> list) {
this.list = list;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null){
convertView = inflater.inflate(R.layout.item, null);
}
ImageView logo = (ImageView) convertView.findViewById(R.id.logo);
TextView title = (TextView) convertView.findViewById(R.id.title);
TextView version = (TextView) convertView.findViewById(R.id.version);
TextView size = (TextView) convertView.findViewById(R.id.size);
Map map = list.get(position);
logo.setImageResource((Integer) map.get("logo"));
title.setText((String) map.get("title"));
version.setText((String) map.get("version"));
size.setText((String) map.get("size"));
return convertView;
}
}
储存n(4)+1个item视图缓存对象
二级优化示例:
public class MyAdapter extends BaseAdapter {
List<Map<String, Object>> list;
LayoutInflater inflater;
public MyAdapter(Context context) {
this.inflater = LayoutInflater.from(context);
}
public void setList(List<Map<String, Object>> list) {
this.list = list;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if(convertView == null){
convertView = inflater.inflate(R.layout.item, null);
holder = new ViewHolder();
holder.logo = (ImageView) convertView.findViewById(R.id.logo);
holder.title = (TextView) convertView.findViewById(R.id.title);
holder.version = (TextView) convertView.findViewById(R.id.version);
holder.size = (TextView) convertView.findViewById(size);
convertView.setTag(holder);
}else{
holder = (ViewHolder) convertView.getTag();
}
Map map = list.get(position);
holder.logo.setImageResource((Integer) map.get("logo"));
holder.title.setText((String) map.get("title"));
holder.version.setText((String) map.get("version"));
holder.size.setText((String) map.get("size"));
return convertView;
}
public class ViewHolder{
ImageView logo;
TextView title;
TextView version;
TextView size;
}
}
setTag携带任何类型的对象 getTag取出对象
界面的跳转 界面与界面的传值
准备:
Activity
public class DetailActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//设置全局
setContentView(R.layout.main8);
//初始化控件
}
}
layout
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<TextView
android:id="@+id/info"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="28sp"
android:text="信息"
/>
</RelativeLayout>
Activity注册: Android -- manifests -- AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.srq.appch5">
<!-- To auto-complete the email text field in the login form with the user's emails -->
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.READ_PROFILE" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter> //意图过滤器
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".DetailActivity"/> //<activity android:name="com.srq.appch5.DetailActivity"/>
</application>
</manifest>
java代码(不全)
@Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Toast.makeText(this, "点击"+position,Toast.LENGTH_SHORT).show(); Intent intent = new Intent(); //被动的包裹 intent.setClass(this,DetailActivity.class); startActivity(intent); //发送intent }
示例:
Java代码(不全)
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(this, "点击"+position,Toast.LENGTH_SHORT).show();
Intent intent = new Intent();
intent.setClass(this,DetailActivity.class);
intent.putExtra("index",""+position);
startActivity(intent);
}
DetailActivity.xml
public class DetailActivity extends Activity{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //设置全局 setContentView(R.layout.main8); //初始化控件 String index = getIntent().getStringExtra("index"); TextView info = (TextView) findViewById(R.id.info); info.setText("编号:"+index); } }
Java代码
@Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Toast.makeText(this, "点击"+position,Toast.LENGTH_SHORT).show(); Intent intent = new Intent(); intent.setClass(this,DetailActivity.class); //1.获取所点击行的数据(Map) HashMap<String, Object> itemMap = (HashMap<String, Object>) parent.getItemAtPosition(position); intent.putExtra("index",""+position); intent.putExtra("title",""+itemMap.get("title")); startActivity(intent);
DetailActivity.xml
public class DetailActivity extends Activity{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //设置全局 setContentView(R.layout.main8); //初始化控件 String index = getIntent().getStringExtra("index"); String title = getIntent().getStringExtra("title"); TextView info = (TextView) findViewById(R.id.info); info.setText("编号:"+index + " "+ title); } }
Java完整代码
public class MainActivity extends Activity implements AdapterView.OnItemClickListener, AdapterView.OnItemLongClickListener { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main7); //1.拿到listview对象 ListView lv = (ListView) this.findViewById(R.id.lv_main); //2.数据源 List<Map<String,Object>> list = new ArrayList<Map<String,Object>>(); Map<String,Object> map = new HashMap<String, Object>(); map.put("logo", R.drawable.ic_10); map.put("title", "千千静听"); map.put("version", "版本: 8.4.0"); map.put("size", "大小: 32.81M"); list.add(map); map = new HashMap<String, Object>(); map.put("logo", R.drawable.ic_2); map.put("title", "时空猎人"); map.put("version", "版本: 2.4.1"); map.put("size", "大小: 84.24M"); list.add(map); map = new HashMap<String, Object>(); map.put("logo", R.drawable.ic_4); map.put("title", "360新闻"); map.put("version", "版本: 6.2.0"); map.put("size", "大小: 11.74M"); list.add(map); map = new HashMap<String, Object>(); map.put("logo", R.drawable.ic_15); map.put("title", "捕鱼达人2"); map.put("version", "版本: 2.3.0"); map.put("size", "大小: 45.53M"); list.add(map); //3.设置适配器 MyAdapter adapter = new MyAdapter(this); adapter.setList(list); //4.关联适配器 lv.setAdapter(adapter); //5 lv.setOnItemClickListener(this); lv.setOnItemLongClickListener(this); } @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Toast.makeText(this, "点击"+position,Toast.LENGTH_SHORT).show(); Intent intent = new Intent(); intent.setClass(this,DetailActivity.class); //1.获取所点击行的数据(Map) HashMap<String, Object> itemMap = (HashMap<String, Object>) parent.getItemAtPosition(position); intent.putExtra("index",""+position); intent.putExtra("title",""+itemMap.get("title")); startActivity(intent); } @Override public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { Toast.makeText(this, "长按"+position,Toast.LENGTH_SHORT).show(); return true; } }