当前位置:编程学习 > wap >>

android activity类实现了OnScrollListener接口时,listview滑到最低端时报错

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;
}

}
--------------------编程问答-------------------- 求大神!!!!!!!!!!在线等 --------------------编程问答-------------------- 看下log信息,是哪行报错 --------------------编程问答-------------------- 数组越界,应该是你的ArrayList取值超过最大范围造成的,滑动到最底部的时候打印调试下就知道了
补充:移动开发 ,  Android
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,