編輯:關於Android編程
面試中經常問到listView優化的問題,個人回答主要如下
1、View重用 使用setTag把view緩存起來
2、適配器在主線程修改
3、在主線程提交適配器的變化,並調用notifyDataSetChanged()方法
4、可以在任何地方獲取數據,但應該在另外一個地方請求數據,數據多次請求分次顯示
簡單實例:
package com.android.listviewtest;
import java.util.LinkedHashMap;
import java.util.Map;
import android.app.Activity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
//定義view緩存對象
static class HolderView {
TextView showName;
TextView showInfo;
}
//一次裝載 多次顯示
private Map maps;
// 顯示的頁數
private int page = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
maps=new LinkedHashMap();
for (int i = 0; i < 100; i++) {
maps.put("熊"+i, "程序員"+i+"號");
}
Button btshow = (Button) findViewById(R.id.bt_show);
ListView showlist = (ListView) findViewById(R.id.listshow);
final ShowName showName = new ShowName();
showlist.setAdapter(showName);
btshow.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (page< 100 / 5) {
page++;
showName.notifyDataSetChanged();
}else{
Toast.makeText(MainActivity.this, "沒有多余的數據了", Toast.LENGTH_LONG).show();
}
}
});
}
class ShowName extends BaseAdapter {
// 每次加載5條數據
@Override
public int getCount() {
return page * 5;
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
HolderView holderView;
//判斷每一個item中的view是否已經存在
if (convertView == null) {
//加載view
convertView = LayoutInflater.from(MainActivity.this).inflate(
R.layout.show_name, null);
holderView = new HolderView();
holderView.showName = (TextView) convertView
.findViewById(R.id.txt1);
holderView.showInfo = (TextView) convertView
.findViewById(R.id.txt2);
//添加一個額外的數據
convertView.setTag(holderView);
} else {
holderView = (HolderView) convertView.getTag();
}
String name=((maps.keySet().toArray())[position]).toString();
String info=maps.get(name);
holderView.showName.setText(name);
holderView.showInfo.setText(info);
return convertView;
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
Android 仿小米鎖屏實現九宮格解鎖功能(無需圖片資源)
最近公司要求做個九宮格解鎖,本人用的是小米手機,看著他那個設置鎖屏九宮格很好看,就做了該組件,不使用圖片資源,純代碼實現。尊重每個辛苦的博主,在http://
Android 通用ListView、GridView適配器
1、簡述在Android開發肯定避免不了與adapter打交道,一般都是繼承於BaseAdapter重寫裡面幾個方法,然後一個ListView對應一個Adapter,那自
Android開發之無痕過渡下拉刷新控件的實現思路詳解
相信大家已經對下拉刷新熟悉得不能再熟悉了,市面上的下拉刷新琳琅滿目,然而有很多在我看來略有缺陷,接下來我將說明一下存在的缺陷問題,然後提供一種思路來解決這一缺陷,廢話不多
Android greenDAO數據庫配置教程
一、環境配置1、在Android Studio中,在.src/main目錄下新建一個java-gen文件夾,和java文件夾同級。用於存放greenDAO生成的DaoMa