`
v5browser
  • 浏览: 1136100 次
社区版块
存档分类
最新评论

Android ListView滑动加载

 
阅读更多

项目结构如图所示:

项目主要包括一个activity和三个xml页面布局,代码如下:

MainActivity.java

import android.app.ListActivity;  
import android.os.Bundle;  
import android.os.Handler;  
import android.view.LayoutInflater;  
import android.view.View;  
import android.view.ViewGroup;  
import android.widget.AbsListView;  
import android.widget.BaseAdapter;  
import android.widget.Button;  
import android.widget.LinearLayout;  
import android.widget.ListView;  
import android.widget.TextView;  
import android.widget.AbsListView.OnScrollListener;  
 
public class MainActivity extends ListActivity implements OnScrollListener {  
      
    private ListView listView;  
    //全局变量,用来记录ScrollView的滚动状态,1表示开始滚动,2表示正在滚动,0表示停止滚动  
    private int scrollState;  
    //可加载记录的条数  
    private int count = 100;  
    private int lastItem;  
    //当前可见页面中的Item总数  
    private int visibleItemCount;  
      
    private Button footerButton;  
    private LinearLayout footerProgressBarLayout;  
    private View view;  
    private ListAdapter mAdapter = new ListAdapter();  
      
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        //加载主页面布局  
        setContentView(R.layout.main);  
          
        LayoutInflater inflater = LayoutInflater.from(this);  
        //加载底部布局  
        view = inflater.inflate(R.layout.main_more, null);  
        footerButton = (Button) view.findViewById(R.id.button);  
        footerProgressBarLayout = (LinearLayout) view.findViewById(R.id.linearlayout);  
        footerProgressBarLayout.setVisibility(View.GONE);  
        //更多按钮点击事件  
        footerButton.setOnClickListener(new View.OnClickListener() {  
              
            public void onClick(View v) {  
                if(lastItem == mAdapter.count && scrollState == OnScrollListener.SCROLL_STATE_IDLE){  
                    //设置页面底部布局控件可见性  
                    footerButton.setVisibility(View.GONE);  
                    footerProgressBarLayout.setVisibility(View.VISIBLE);  
                    if(mAdapter.count <= count){  
                        //使用Handler动态加载数据  
                        new Handler().postDelayed(new Runnable() {  
                              
                            public void run() {  
                                mAdapter.count += 10;  
                                mAdapter.notifyDataSetChanged();  
                                listView.setSelection(lastItem - visibleItemCount + 1);  
                                //获取数据成功设置Layout不可见,Button设为可见  
                                footerButton.setVisibility(View.VISIBLE);  
                                footerProgressBarLayout.setVisibility(View.GONE);  
                            }  
                        } , 2000);  
                    }  
                }  
            }  
        });  
          
        listView = getListView();  
        //将布局添加到ListView的Footer中  
        listView.addFooterView(view);  
        listView.setAdapter(mAdapter);  
          
        //设置滑动监听  
        listView.setOnScrollListener(this);  
    }  
 
    public void onScroll(AbsListView view, int firstVisibleItem,  
            int visibleItemCount, int totalItemCount) {  
        this.visibleItemCount = visibleItemCount;  
        lastItem = firstVisibleItem + visibleItemCount - 1;  
        if(mAdapter.count >= count){  
            listView.removeFooterView(view);  
        }  
          
//        boolean loadMore = firstVisibleItem + visibleItemCount >= totalItemCount;  
//        if(loadMore){  
//          mAdapter.count += visibleItemCount;  
//          mAdapter.notifyDataSetChanged();  
//        }  
    }  
 
    public void onScrollStateChanged(AbsListView view, int scrollState) {  
        this.scrollState = scrollState;  
    }  
      
    /**  
     * 数据匹配器  
     * @author qin_lei  
     *  
     */ 
    public class ListAdapter extends BaseAdapter{  
 
        int count = 10;  
          
        public int getCount() {  
            return count;  
        }  
 
        public Object getItem(int position) {  
            return position;  
        }  
 
        public long getItemId(int position) {  
            return position;  
        }  
 
        public View getView(int position, View convertView, ViewGroup parent) {  
            LayoutInflater inflater = LayoutInflater.from(MainActivity.this);  
            View view = inflater.inflate(R.layout.main_item, null);  
            TextView tv = (TextView) view.findViewById(R.id.tv);  
            tv.setText("Hello " + position);  
            return view;  
        }  
    }  
} 

主要布局文件代码如下:

main.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"      
    android:orientation="vertical"      
    android:layout_width="fill_parent"      
    android:layout_height="fill_parent">      
    <ListView            
        android:id="@android:id/list"          
        android:layout_width="fill_parent"           
        android:layout_height="wrap_content"/> 
</LinearLayout> 

main_more.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"      
    android:orientation="vertical"      
    android:layout_width="fill_parent"      
    android:layout_height="fill_parent">      
    <Button          
        android:id="@+id/button"          
        android:layout_width="fill_parent"           
        android:layout_height="wrap_content"           
        android:text="更多"/>      
    <LinearLayout          
        android:orientation="horizontal"          
        android:layout_width="fill_parent"          
        android:layout_height="wrap_content"          
        android:gravity="center"          
        android:id="@+id/linearlayout">          
        <ProgressBar              
            android:layout_width="wrap_content"              
            android:layout_height="wrap_content"/>          
        <TextView              
            android:layout_width="wrap_content"              
            android:layout_height="wrap_content"              
            android:text="正在获取..."/>          
    </LinearLayout> 
</LinearLayout>

ListView单个显示item布局main_item.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"      
    android:orientation="horizontal"      
    android:layout_width="fill_parent"      
    android:layout_height="fill_parent">      
    <ImageView          
        android:layout_width="wrap_content"          
        android:layout_height="wrap_content"          
        android:scaleType="fitXY"          
        android:src="@drawable/icon_head"/>      
    <TextView          
        android:id="@+id/tv"          
        android:layout_width="fill_parent"           
        android:layout_height="20dp"           
        android:text="@string/hello"/> 
</LinearLayout>

项目运行结果如下图:

点击更多,十条,依次类推:


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics