listview分页效果

来源:互联网 发布:webshell提权工具包 编辑:程序博客网 时间:2024/05/29 10:22

一般情况下,如果要加载的数据比较多,直接加载出来所有的数据是一个很笨而且用户体验会很差的方式。listview的分页便可处理每次加载部分数据以提高用户体验。

实现代码如下:首先需要创建三个XML layout文件,分别是activity_main.xml,button.xml,textview.xml,分别是主界面,放置在listview下方的一个界面(只有一个按钮button),listview中的显示界面。另外Java文件有两个,一个是mainActivity,一个是listviewAdapter.java。

activity_main.xml文件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context=".MainActivity" >    <ListView        android:id="@+id/listview"        android:layout_width="match_parent"        android:layout_height="wrap_content" >    </ListView></RelativeLayout>
button.xml文件:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical" >        <Button android:id="@+id/btn"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:onClick="loadMore"        android:text="加载更多"/></LinearLayout>

textview.xml文件:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical" >    <TextView        android:id="@+id/tv"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:textSize="200sp"        android:gravity="center" /></LinearLayout>

ListviewAdapter.java文件:

package com.example.morelistview;import java.util.List;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.TextView;public class ListviewAdapter extends BaseAdapter {private List<String> items;private LayoutInflater inflater;public ListviewAdapter(Context context,List<String> items){this.items = items;inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);}@Overridepublic int getCount() {return items.size();}@Overridepublic Object getItem(int position) {return items.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {if(convertView == null){convertView = inflater.inflate(R.layout.textview, null);}TextView text = (TextView) convertView.findViewById(R.id.tv);text.setText(items.get(position));return convertView;}/** * 添加项 * @param item */public void addItem(String item){items.add(item);}}
MainActivity文件:

package com.example.morelistview;import java.util.ArrayList;import android.os.Bundle;import android.os.Handler;import android.util.Log;import android.view.View;import android.widget.AbsListView;import android.widget.AbsListView.OnScrollListener;import android.widget.Button;import android.widget.ListView;import android.widget.Toast;import android.app.Activity;public class MainActivity extends Activity implements OnScrollListener {private ListView listview;private int visiblelastIndex = 0;// 最后的可视索引项private int visibleItemCount; // 当前窗口可见项总数private ListviewAdapter adapter;private View loadMoreView;private Button loadMoreButton;private Handler handler = new Handler();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);loadMoreView = getLayoutInflater().inflate(R.layout.button, null);loadMoreButton = (Button) loadMoreView.findViewById(R.id.btn);listview = (ListView) findViewById(R.id.listview);listview.addFooterView(loadMoreView);//设置列表底部视图,在listview下方放置的界面,一个按钮initAdapter();listview.setAdapter(adapter);}/** * 初始化适配器 */private void initAdapter() {ArrayList<String> items = new ArrayList<String>();for (int i = 1; i < 10; i++) {items.add(String.valueOf(i));}adapter = new ListviewAdapter(this, items);}/** * 加载更多的响应 * @param view */public void loadMore(View view) {loadMoreButton.setText("正在加载...");//这一部分是效果,延迟2秒显示//handler.postDelayed(new Runnable() {////@Override//public void run() {//loadData();//adapter.notifyDataSetChanged();////listview.setSelection(visiblelastIndex - visibleItemCount + 1);//loadMoreButton.setText("加载更多");//}//}, 2000);loadData();adapter.notifyDataSetChanged();//loadMoreButton.setText("加载更多");}/** * 加载数据 */private void loadData() {int count = adapter.getCount();for (int i = count; i < count + 10; i++) {adapter.addItem(String.valueOf(i + 1));}}}


0 0