編輯:關於Android編程
以前也實現過,ListView的上拉刷新,不過用的是開源代碼,由於本人比較懶吧,源碼也沒怎麼研究,所以現在寫出來還不是那麼流利。還好本人發現了自己的這些特點,所以寫出來個Demo,基本實現了ListView的上拉說新,當做練習了,可能還不是那麼完美,以後根據開源代碼的研究,會寫出更好的並且簡單易懂的下拉說新Demo來發表。
實現效果圖:

直接上代碼吧:

MainActivity:
package com.listdemo;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
private ListView listView;
private MyAdapter adapter;
private List list = new ArrayList();
private List listAll = new ArrayList();
private Map map = new HashMap();
private boolean is_divPage;// 是否進行分頁操作
private MyAdapter mAdatper;
private TextView tv_msg;
private LinearLayout loading;
private LinearLayout list_footer;
// public static int pageNum = 1;// 設置pageNo的初始化值為1,即默認獲取的是第一頁的數據。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (ListView) findViewById(R.id.listView1);
/**
* 添加ListView的footer
*/
list_footer = (LinearLayout) getLayoutInflater().inflate(
R.layout.list_footer, null);
list_footer.setBackgroundColor(Color.parseColor(#ffffff));
tv_msg = (TextView) list_footer.findViewById(R.id.tv_msg);// 更多
loading = (LinearLayout) list_footer.findViewById(R.id.loading);// 讀取中+progressBar
tv_msg.setVisibility(View.GONE);
loading.setVisibility(View.VISIBLE);
listView.addFooterView(list_footer);
/**
* listView中添加數據
*/
initData();
/**
* 將每頁數據(list中每次存儲的數據)添加到ListAll(存儲所有的數據)中。
*/
listAll.addAll(list);
adapter = new MyAdapter(this, listAll);
listView.setAdapter(adapter);
/**
* listview的監聽事件
*/
listView.setOnScrollListener(new OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
/**
* 如果等到該分頁(is_divPage = true)的時候,並且滑動停止(這個時候手已經離開了屏幕),自動加載更多。
*/
if (is_divPage
&& scrollState == OnScrollListener.SCROLL_STATE_IDLE) {
Toast.makeText(MainActivity.this, 正在獲取更多數據...,
Toast.LENGTH_SHORT).show();
Log.d(zhongyao, 調用onScrollStateChanged!!!!);
initData();
listAll.addAll(list);
adapter.notifyDataSetChanged();
tv_msg.setVisibility(View.INVISIBLE);
loading.setVisibility(View.VISIBLE);
} else if (!is_divPage
&& scrollState == OnScrollListener.SCROLL_STATE_IDLE) {
tv_msg.setVisibility(View.VISIBLE);
loading.setVisibility(View.INVISIBLE);
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
is_divPage = (firstVisibleItem + visibleItemCount == totalItemCount);
}
});
}
private void initData() {
list.clear();
for (int i = 0; i < 10; i++) {
list.add(zhongyao +i);
}
}
}
MyAdapter:
package com.listdemo;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import android.widget.Toast;
/**
* 適配器
* @author Administrator
*
*/
public class MyAdapter extends BaseAdapter {
private Context context;
private List list = new ArrayList();
public MyAdapter(Context contex, List list) {
this.context = contex;
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(final int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
holder = new ViewHolder();
convertView = LayoutInflater.from(context).inflate(
R.layout.list_item, null);
holder.tv_name = (TextView) convertView
.findViewById(R.id.textView1);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.tv_name.setText(list.get(position));
convertView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(context, 您的選擇是: + position, 1).show();
}
});
return convertView;
}
class ViewHolder {
private TextView tv_name, tv_age;
}
}
activity_main:
list_item;
Android入門之ActivityGroup+GridView實現Tab分頁標簽的方法
在Android程序中很多客戶端軟件和浏覽器軟件都喜歡用Tab分頁標簽來搭建界面框架。讀者也許會馬上想到使用TabHost 與 TabActivity的組合,其實最常用的
3D語音天氣球——在Unity中使用Android語音服務
轉載請注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),謝謝支持! 開篇廢話: 這個項目准備分四部
android 完全退出應用程序實現代碼
android退出應用程序會調用android.os.Process.killProcess(android.os.Process.myPid())或是System.ex
android NFC 程序設計
NFC簡介 NFC是Near Field Communication縮寫,即近距離無線通訊技術。由飛利浦公司和索尼公司共同開發的NFC是一種非 接觸式識別和