android activity类实现了OnScrollListener接口时,listview滑到最低端时报错,加载到最后一条时程序自动崩溃
package com.ciliang.contacts;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import com.ciliang.adapter.ContactsListViewAdapter;import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.provider.ContactsContract.PhoneLookup;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.util.Log;
import android.view.Gravity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.inputmethod.InputMethodManager;
import android.view.Window;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;public class ContactsActivity extends Activity implements OnScrollListener {
ListView listView;
Button searchNameButton;
Button call2;
EditText searchEditText;
ContactsListViewAdapter contactsListViewAdapter;
List<HashMap<String, Object>> data;
List<HashMap<String, Object>> newData = new ArrayList<HashMap<String, Object>>(); private static final String TAG = "ContactsActivity";
/**
 * 设置布局显示为目标有多大就多大
 */
private LayoutParams WClayoutParams = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
/**
 * 设置布局显示目标最大化
 */
private LayoutParams FFlayoutParams = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.FILL_PARENT,
LinearLayout.LayoutParams.FILL_PARENT);
private ProgressBar progressBar; private int lastItem = 0;
String string = ""; int i = 0;// 设定一个初始化的data.size() @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_contacts); listView = (ListView) this.findViewById(R.id.contacts);
// 关闭输入法
InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
inputMethodManager.hideSoftInputFromWindow(ContactsActivity.this
.getCurrentFocus().getWindowToken(),
InputMethodManager.RESULT_SHOWN);
// 模糊查询
searchNameButton = (Button) findViewById(R.id.searchNameButton); searchEditText = (EditText) findViewById(R.id.searchEditText);
searchNameButton.setOnClickListener(new Search()); LinearLayout layout = new LinearLayout(this); progressBar = new ProgressBar(this);
// 进度条显示位置
progressBar.setPadding(0, 0, 15, 0);
layout.addView(progressBar, WClayoutParams);
TextView textView = new TextView(this);
textView.setText("加载中...");
textView.setGravity(Gravity.CENTER_VERTICAL); layout.addView(textView, FFlayoutParams);
layout.setGravity(Gravity.CENTER);
LinearLayout loadingLayout = new LinearLayout(this);
loadingLayout.addView(layout, WClayoutParams);
loadingLayout.setGravity(Gravity.CENTER); listView.addFooterView(loadingLayout); // 查询联系人信息
ContentResolver contentResolver = getContentResolver();
Uri uri = Uri.parse("content://com.android.contacts/contacts");
Cursor cursor = contentResolver.query(
ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
List<HashMap<String, Object>> data = new ArrayList<HashMap<String, Object>>();
while (cursor.moveToNext()) {
int nameFieldColumnIndex = cursor
.getColumnIndex(PhoneLookup.DISPLAY_NAME); String contact = cursor.getString(nameFieldColumnIndex);
String id = cursor.getString(cursor
.getColumnIndex(ContactsContract.Contacts._ID)); // 查找联系人id
Cursor phone = contentResolver.query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "="
+ id, null, null);
String phonenumber = "";
if (ContactsContract.CommonDataKinds.Phone.CONTACT_ID.toString() != null) {
while (phone.moveToNext()) { phonenumber = phone
.getString(phone
.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); string += (contact + ":" + phonenumber + "\n"); }
}
String name = cursor.getString(cursor
.getColumnIndex(PhoneLookup.DISPLAY_NAME)); // 联系人姓名
String hasnumber = cursor.getString(cursor
.getColumnIndex(PhoneLookup.HAS_PHONE_NUMBER));
HashMap<String, Object> item = new HashMap<String, Object>();
item.put("id", id);
item.put("name", name);
item.put("hasnumber", hasnumber);
item.put("phonenumber", phonenumber);
data.add(item);
}
i = data.size();
System.out.println("data.size----------------------------"
+ data.size() + "--------------------------"); cursor.close(); registerForContextMenu(listView); contactsListViewAdapter = new ContactsListViewAdapter(this, data);
listView.setAdapter(contactsListViewAdapter);
listView.setOnScrollListener(this); } // 点击按钮模糊查询事件
class Search implements OnClickListener {
@Override
public void onClick(View v) {
// System.out.println(data.size());
// TODO Auto-generated method stub
List<HashMap<String, Object>> data = new ArrayList<HashMap<String, Object>>();
String str = searchEditText.getText().toString();
newData.clear();
if ("".equals(str)) { contactsListViewAdapter = new ContactsListViewAdapter(
ContactsActivity.this, data);
listView.setAdapter(contactsListViewAdapter);
} else {
ContentResolver contentResolver = getContentResolver();
Cursor cursor = contentResolver.query(
ContactsContract.Contacts.CONTENT_URI, null,
"display_name like ?", new String[] { "%"
+ searchEditText.getText().toString() + "%" },
null); while (cursor.moveToNext()) {
int nameFieldColumnIndex = cursor
.getColumnIndex(PhoneLookup.DISPLAY_NAME); String contact = cursor.getString(nameFieldColumnIndex);
String id = cursor.getString(cursor
.getColumnIndex(ContactsContract.Contacts._ID)); // 查找联系人id
Cursor phone = contentResolver.query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID
+ "=" + id, null, null);
String phonenumber = ""; if (ContactsContract.CommonDataKinds.Phone.CONTACT_ID
.toString() == null) {
while (phone.moveToNext()) { phonenumber = phone
.getString(phone
.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); string += (contact + ":" + phonenumber + "\n"); }
}
String name = cursor.getString(cursor
.getColumnIndex(PhoneLookup.DISPLAY_NAME)); // 联系人姓名
String hasnumber = cursor.getString(cursor
.getColumnIndex(PhoneLookup.HAS_PHONE_NUMBER));
HashMap<String, Object> item = new HashMap<String, Object>();
item.put("id", id);
item.put("name", name);
item.put("hasnumber", hasnumber);
item.put("phonenumber", phonenumber);
data.add(item); }
cursor.close();
contactsListViewAdapter = new ContactsListViewAdapter(
ContactsActivity.this, data);
listView.setAdapter(contactsListViewAdapter);
}
} } @Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
// TODO Auto-generated method stub lastItem = firstVisibleItem + visibleItemCount - 1;
System.out.println("lastItem:" + lastItem);
Log.i(TAG, "lastItem:" + lastItem);
System.out.println("onScroll-------------------------------"
+ lastItem);
} @Override
public void onScrollStateChanged(AbsListView view, int state) {
// TODO Auto-generated method stub
if (state == OnScrollListener.SCROLL_STATE_IDLE) { System.out.println("int------------" + i + "-------------------");
if (view.getLastVisiblePosition() == i) { Toast.makeText(getApplicationContext(), "最后一页",
Toast.LENGTH_LONG).show(); } else if (view.getLastVisiblePosition() == view.getCount() - 1) {
contactsListViewAdapter.count += 30;
contactsListViewAdapter.notifyDataSetChanged();
int currentPage = contactsListViewAdapter.count / 30;
Toast.makeText(getApplicationContext(),
"第" + currentPage + "页", Toast.LENGTH_LONG).show();
}
}
} @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.contacts, menu);
return true;
}}