編輯:關於Android編程
這次在代碼上比上一次改進了一些,並且加載完全部數據後會在lisview底部顯示一個“已加載全部“的textview。大家可以對比我的上一篇博客
android Listview分批加載+自動加載(附源碼下載)看看代碼有啥不同
直接上代碼:
public class TestForListviewActivity extends Activity implements OnScrollListener { private View mFooterView; private LinearLayout mloadingLinear;//正在加載時顯示的view private TextView mLoadFinishTextView;//加載全部數據後顯示的view private final int LOAD_STATE_IDLE=0;//沒有在加載,並且服務器上還有數據沒加載 private final int LOAD_STATE_LOADING=1;//正在加載狀態 private final int LOAD_STATE_FINISH=2;//表示服務器上的全部數據都已加載完畢 private int loadState=LOAD_STATE_IDLE;//記錄加載的狀態 private final int MAX_COUNT=15;//表示服務器總共有MAX_COUNT條數據 private final int EACH_COUNT=10;//表示每次加載的條數 private ListView mListview = null; private PaginationAdapter mAdapter; private Handler handler=new Handler(); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mFooterView = getLayoutInflater().inflate(R.layout.loadmore, null); mloadingLinear=(LinearLayout) mFooterView.findViewById(R.id.loading_linear); mLoadFinishTextView=(TextView) mFooterView.findViewById(R.id.load_finish_textview); mListview = (ListView) findViewById(R.id.listview); mListview.addFooterView(mFooterView);// 設置列表底部視圖 Listnews=new ArrayList (); mAdapter = new PaginationAdapter(news);; mListview.setAdapter(mAdapter); //設置setOnScrollListener會自動調用onscroll方法。 mListview.setOnScrollListener(this); } public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { Log.i("onS", "firstVisibleItem"+firstVisibleItem+" visibleItemCount"+visibleItemCount+" totalItemCount"+totalItemCount); if (firstVisibleItem+visibleItemCount==totalItemCount) { if(loadState==LOAD_STATE_IDLE) { Log.i("onScroll", "firstVisibleItem"+firstVisibleItem+" visibleItemCount"+visibleItemCount+" totalItemCount"+totalItemCount); loadState=LOAD_STATE_LOADING; loadMore(); } } } public void onScrollStateChanged(AbsListView arg0, int scrollState) { Log.i("onScrollStateChanged", scrollState+""); } private void loadMore(){ //等待2秒之後才加載,模擬網絡等待時間為2s handler.postDelayed(new Runnable() { public void run() { loadData(); mAdapter.notifyDataSetChanged(); if (loadState==LOAD_STATE_FINISH) { //加載全部數據後在底部顯示一個“已加載全部”的textview mloadingLinear.setVisibility(View.GONE); mLoadFinishTextView.setVisibility(View.VISIBLE); } } },2000); } private void loadData() { int dataIndex;//要加載的數據的index(從0開始) int count = mAdapter.getCount(); //如果服務端還有數據,則繼續加載更多 for (dataIndex = count; dataIndex < Math.min(count+EACH_COUNT, MAX_COUNT); dataIndex++) { News item = new News(); item.setTitle("Title" + dataIndex); item.setContent("This is News Content" + dataIndex); mAdapter.addNewsItem(item); } //如果服務器上的全部數據都已加載完畢 if (dataIndex==MAX_COUNT) { loadState=LOAD_STATE_FINISH; } else { loadState=LOAD_STATE_IDLE; } } class PaginationAdapter extends BaseAdapter { List newsItems; public PaginationAdapter(List newsitems) { this.newsItems = newsitems; } public int getCount() { return newsItems==null?0:newsItems.size(); } public Object getItem(int position) { return newsItems.get(position); } public long getItemId(int position) { return position; } public void addNewsItem(News newsitem) { newsItems.add(newsitem); } public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = getLayoutInflater().inflate(R.layout.list_item, null); } // 新聞標題 TextView tvTitle = (TextView) convertView .findViewById(R.id.newstitle); tvTitle.setText(newsItems.get(position).getTitle()); // 新聞內容 TextView tvContent = (TextView) convertView .findViewById(R.id.newscontent); tvContent.setText(newsItems.get(position).getContent()); return convertView; } } }
改進版demo下載:源碼下載
需求NDK是由谷歌娘提供的,某種意義上就是可以讓android使用c開發的第“三”方sdk,所以,正常來說eclipse是沒有配置這個東西的,當然
前面幾篇博客,我們將了Android中利用OpenGL ES 2.0繪制各種形體,並在上一篇博客中專門講了GLSL語言。但是我們看到的基於OpenGL開發的應用和游戲,可
在開發Android應用程序時,如果需要使用系統提供的服務,可以通過服務名稱調用山下文的getSystemService(String name)來獲取服務管理者,那麼該
ProgressBar進度條,分為旋轉進度條和水平進度條,進度條的樣式根據需要自定義,之前一直不明白進度條如何在實際項目中使用,網上演示進度條的案例大多都是通過Butto