編輯:關於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 Mapmaps; // 顯示的頁數 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; } }
最近公司要求做個九宮格解鎖,本人用的是小米手機,看著他那個設置鎖屏九宮格很好看,就做了該組件,不使用圖片資源,純代碼實現。尊重每個辛苦的博主,在http://
1、簡述在Android開發肯定避免不了與adapter打交道,一般都是繼承於BaseAdapter重寫裡面幾個方法,然後一個ListView對應一個Adapter,那自
相信大家已經對下拉刷新熟悉得不能再熟悉了,市面上的下拉刷新琳琅滿目,然而有很多在我看來略有缺陷,接下來我將說明一下存在的缺陷問題,然後提供一種思路來解決這一缺陷,廢話不多
一、環境配置1、在Android Studio中,在.src/main目錄下新建一個java-gen文件夾,和java文件夾同級。用於存放greenDAO生成的DaoMa