您的位置:首页 > 移动开发 > 微信开发

仿QQ、微信翻页查看聊天记录

2015-06-26 17:52 651 查看
主界面MainActivity.class

public class MainActivity extends Activity implements OnScrollListener{
private ProgressBar loadInfo;
private ListView listView;
private LinearLayout loadLayout;
private ArrayList<string> items;
private DatabaseService service;
private int currentPage = 1; //默认在第一页
private static final int lineSize =10;    //每次显示数
private int allRecorders = 0;  //全部记录数
private int pageSize = 1;  //默认共一页
private Aleph0 baseAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (ListView) findViewById(R.id.listview);
service = new DatabaseService(this);
//创建一个角标线性布局用来显示正在加载
loadLayout = new LinearLayout(this);
loadLayout.setGravity(Gravity.CENTER);
//定义一个ProgressBar表示“正在加载”
loadInfo = new ProgressBar(this,null,android.R.attr.progressBarStyleSmall);
//增加组件
loadLayout.addView(loadInfo, new LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));
//增加到listView头部
listView.addHeaderView(loadLayout);
listView.setOnScrollListener(this);

showAllData();

}

/**
* 读取全部数据
*/
public void showAllData(){

allRecorders = service.getCount();
//计算总页数
pageSize = (allRecorders + lineSize -1) / lineSize;
items = service.getAllItems(currentPage, lineSize);
Collections.reverse(items);  //倒序
baseAdapter = new Aleph0();
listView.setAdapter(baseAdapter);
listView.setSelection(items.size());//直接定位到最底部
}
int firstItem=-1;

@Override
public void onScroll(AbsListView absView, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
firstItem=firstVisibleItem;
}
@Override
public void onScrollStateChanged(AbsListView view, int scorllState) {
if (firstItem==0&& currentPage < pageSize&& scorllState == OnScrollListener.SCROLL_STATE_IDLE) {// 不再滚动
Log.e(log, 滑到第一位);
currentPage++;
// 增加数据
appendDate();
}
}

/**
* 增加数据
*/
private void appendDate(){
final ArrayList<string> additems = service.getAllItems(currentPage, lineSize);
Collections.reverse(additems);
baseAdapter.setCount(baseAdapter.getCount() + additems.size());
//判断,如果到了最末尾则去掉“正在加载”
if(allRecorders == baseAdapter.getCount()){
listView.removeHeaderView(loadLayout);
}
items.addAll(0, additems);

baseAdapter.notifyDataSetChanged();
listView.setSelection(additems.size());

}

class Aleph0 extends BaseAdapter {
int count = lineSize;

public int getCount() {
return count;
}

public void setCount(int count){
this.count = count;
}

public Object getItem(int pos) {
return pos;
}

public long getItemId(int pos) {
return pos;
}

public View getView(int pos, View v, ViewGroup p) {
TextView view = new TextView(MainActivity.this);
view.setTextSize(60);
if(items != null){
view.setText(items.get(pos));
}else{
view.setText(pos);
}
return view;
}
}

}


/**
* 刷新视图 *
*/
public void setList(List<ChatMode.RecentLetter> bcData) {
Collections.reverse(bcData);
this.listMsg = bcData;
notifyDataSetInvalidated();
lv.setSelection(bcData.size());

}

/**
* 加载更多 *
*/
public void addList(final List<ChatMode.RecentLetter> newMsgData) {
if (this.listMsg != null) {
Collections.reverse(newMsgData);
this.listMsg.addAll(0, newMsgData);
notifyDataSetChanged();
lv.setSelection(newMsgData.size() + 1);
} else {
setList(newMsgData);
}
}


2,主界面布局文件activity_main.xml

<linearlayout android:layout_height="fill_parent" android:layout_width="fill_parent" android:orientation="vertical" xmlns:android="http://schemas.android.com/apk/res/android">

<listview android:id="@+id/listview" android:layout_height="fill_parent" android:layout_width="fill_parent">

</listview></linearlayout>


4,效果图


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: