• android ListView 分页加载数据


    1.mainActivity

    <LinearLayout 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" android:paddingLeft="@dimen/activity_horizontal_margin"
        android:orientation="vertical"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        android:paddingBottom="@dimen/activity_vertical_margin" tools:context="mydemo.mycom.demo2.Home">
    
        <LinearLayout
            android:orientation="horizontal"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content">
    
            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/btn_home_to_login"
                android:text="@string/btn_to_register"/>
            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/btn_exit"
                android:text="@string/btn_to_exit"/>
            </LinearLayout>
    
       <ListView
           android:id="@+id/lv"
           android:layout_width="fill_parent"
           android:layout_height="match_parent"></ListView>
    
    </LinearLayout>

    2.ListView的itemActivity

    <LinearLayout 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" android:paddingLeft="@dimen/activity_horizontal_margin"
        android:orientation="horizontal"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        android:paddingBottom="@dimen/activity_vertical_margin" tools:context="mydemo.mycom.demo2.Home">
    
            <TextView
                android:id="@+id/tv_id"
                android:layout_width="wrap_content"
                android:textColor="#FF172366"
                android:padding="5dp"
                android:layout_height="wrap_content" />
            <TextView
                android:id="@+id/tv_username"
                android:layout_width="wrap_content"
                android:padding="5dp"
                android:textColor="#FF870918"
                android:layout_height="wrap_content" />
    
            <TextView
                android:id="@+id/tv_password"
                android:layout_width="wrap_content"
                android:padding="5dp"
                android:layout_height="wrap_content" />
    
    
    </LinearLayout>

    3.ListView footerActivity

    <LinearLayout 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" android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        android:paddingBottom="@dimen/activity_vertical_margin"
        tools:context="mydemo.mycom.demo2.Footer">
    
        <ProgressBar
            android:layout_width="50dp"
            android:layout_height="wrap_content"
            style="?android:attr/progressBarStyle"
            />
        <TextView android:text="@string/load_text"
            android:textSize="20sp"
            android:gravity="center_vertical"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    
    </LinearLayout>

    4.MainActivity.java

    package mydemo.mycom.demo2;
    
    import android.content.Intent;
    import android.os.Handler;
    import android.os.Message;
    import android.support.v7.app.ActionBarActivity;
    import android.os.Bundle;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.AbsListView;
    import android.widget.AdapterView;
    import android.widget.BaseAdapter;
    import android.widget.Button;
    import android.widget.ListView;
    import android.widget.TextView;
    import android.widget.Toast;
    
    import java.util.List;
    
    
    import mydemo.mycom.demo2.dao.UserDao;
    import mydemo.mycom.demo2.entity.UserInfo;
    import mydemo.mycom.demo2.service.LoginService;
    
    
    public class Home extends ActionBarActivity implements View.OnClickListener {
    
        private ListView lv;
        private Button btn_home_to_login;
        private Button btn_exit;
        private List<UserInfo> list;
        // 设置一个最大的数据条数,超过即不再加载
        private int pageSize=10; //每次获取多少条数据
        // 最后可见条目的索引
        private int pages;//总共有多少页
        private boolean loadfinished = true;
        private MyAdapter myAdapter;
        private View footer;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_home);
    
            btn_home_to_login = (Button)findViewById(R.id.btn_home_to_login);
            btn_exit = (Button)findViewById(R.id.btn_exit);
            lv = (ListView)findViewById(R.id.lv);
            btn_home_to_login.setOnClickListener(this);
            btn_exit.setOnClickListener(this);
    
            footer = getLayoutInflater().inflate(R.layout.activity_footer,null);
    
            UserDao dao = new UserDao(this);
            list = dao.getUserInfo(1,10);
    
            int total = dao.getTotal();
    
            System.out.println(total+"===================================");
    
            pages = total%pageSize==0 ? total/pageSize : total/pageSize+1;
    
            lv.setOnScrollListener(new MyOnScrollListener());
    
            myAdapter = new MyAdapter();
            //添加页脚(放在ListView最后)
            lv.addFooterView(footer);
            lv.setAdapter(myAdapter);
            lv.removeFooterView(footer);
    
            lv.setOnItemClickListener(new MyItemClickListener());
    
        }
    
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            getMenuInflater().inflate(R.menu.menu_home, menu);
            return true;
        }
    
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            int id = item.getItemId();
            if (id == R.id.action_settings) {
                return true;
            }
            return super.onOptionsItemSelected(item);
        }
    
        @Override
        public void onClick(View view) {
            switch(view.getId())
            {
                case R.id.btn_home_to_login:
                    Intent intent = new Intent();
                    intent.setClass(Home.this,Register.class);
                    startActivity(intent);
                    break;
                case R.id.btn_exit:
                    //清除登录数据
                    LoginService.removeLoginInfo(this);
                    Toast.makeText(this,"退出成功",Toast.LENGTH_SHORT).show();
    
                    Intent toLogin = new Intent();
                    toLogin.setClass(Home.this,MainActivity.class);
                    startActivity(toLogin);
                    break;
            }
        }
    
    
        public class MyAdapter extends BaseAdapter
        {
            public int getCount() {
                return list.size();
            }
    
            @Override
            public Object getItem(int i) {
                return null;
            }
    
            @Override
            public long getItemId(int i) {
                return 0;
            }
    
            @Override
            public View getView(int i, View view, ViewGroup viewGroup) {
    
                UserInfo user = list.get(i);
    
                View itemview = View.inflate(Home.this,R.layout.activity_item,null);
    
                TextView tv_id = (TextView)itemview.findViewById(R.id.tv_id);
                TextView tv_username = (TextView)itemview.findViewById(R.id.tv_username);
                TextView tv_password = (TextView)itemview.findViewById(R.id.tv_password);
    
                tv_id.setText(user.getId()+"");
                tv_username.setText(user.getUsername());
                tv_password.setText(user.getPassword());
                return itemview;
            }
        }
    
    
        public class MyItemClickListener implements AdapterView.OnItemClickListener
        {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                ListView lView = (ListView)lv;
                TextView tv_id = (TextView)view.findViewById(R.id.tv_id);
                TextView tv_username = (TextView)view.findViewById(R.id.tv_username);
                TextView tv_password = (TextView)view.findViewById(R.id.tv_password);
                String id = tv_id.getText().toString();
                String username = tv_username.getText().toString();
                String password = tv_password.getText().toString();
                Toast.makeText(getApplicationContext(), id+","+username, Toast.LENGTH_SHORT).show();
                //不同的activity之间的传值
                Intent intent = new Intent();
                intent.putExtra("username",username);
                intent.putExtra("password",password);
                intent.putExtra("id",id);
                intent.setClass(Home.this,Edit.class);
                startActivity(intent);
            }
        }
    
        public class MyOnScrollListener implements AbsListView.OnScrollListener
        {
            @Override
            public void onScrollStateChanged(AbsListView absListView, int scrollState) {
    
            }
    
            @Override
            public void onScroll(AbsListView absListView, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
                int lastItemIndex = lv.getLastVisiblePosition(); //获取当前屏幕最后的Item的id
                System.out.println("====lastItemIndex:"+lastItemIndex);
                System.out.println("====totalItemCount:"+totalItemCount);
                if(lastItemIndex>0&&(lastItemIndex+1)==totalItemCount) //达到数据的最后一条记录
                {
                    //当前页
                    int currentpage = totalItemCount%pageSize==0 ? totalItemCount /pageSize :totalItemCount /pageSize+1;
                    final int nextpage = currentpage +1; //下一页
                    System.out.println("================currentpage:"+currentpage);
                    System.out.println("================nextpage:"+nextpage);
                    if(nextpage<=pages && loadfinished)
                    {
                        loadfinished = false;
                        lv.addFooterView(footer);
                        new Thread(new Runnable() {
                            @Override
                            public void run() {
                                try{
                                    Thread.sleep(3000);
                                }
                                 catch (Exception e)
                                 {
    
                                 }
                                UserDao dao = new UserDao(Home.this);
    
                                List<UserInfo> result = dao.getUserInfo(nextpage,pageSize);
                                handler.sendMessage(handler.obtainMessage(100,result));
                            }
                        }).start();
                    }
                }
            }
    
    
            Handler handler = new Handler() {
    
                public void handleMessage(Message msg)
                {
                    list.addAll((List<UserInfo>)msg.obj);
                    //告诉ListView数据已经发生改变,要求ListView更新界面显示
                    myAdapter.notifyDataSetChanged();
                    if(lv.getFooterViewsCount()>0)
                    {
                        lv.removeFooterView(footer);
                    }
                    loadfinished = true;
    ;            }
    
            };
        }
    
    
    
    }

    5.DAO.java

    public List<UserInfo> getUserInfo(int pageIndex,int pageSize)
        {
            SQLiteDatabase db = helper.getWritableDatabase();
            List<UserInfo> list = new ArrayList<UserInfo>();
    
            String sql = "select * from user order by id asc limit "+(pageIndex-1)*pageSize+","+pageSize;
            System.out.println("sql=======:"+sql+",pageIndex:"+pageIndex);
    
            Cursor cursor = db.rawQuery("select * from user order by id asc limit ?,?",new String[]{((pageIndex-1)*pageSize)+"",pageSize+""});
            while(cursor.moveToNext())
            {
                int id = cursor.getInt(cursor.getColumnIndex("id"));
                String username = cursor.getString(cursor.getColumnIndex("username"));
                String password = cursor.getString(cursor.getColumnIndex("password"));
    
                UserInfo userInfo = new UserInfo(id,username,password);
                list.add(userInfo);
            }
            cursor.close();
            db.close();
            return list;
    
        }

    5.Entity.java

    package mydemo.mycom.demo2.entity;
    
    
    public class UserInfo {
        private int id;
        private String username;
        private String password;
    
        public UserInfo()
        { }
    
        public UserInfo(int id, String username, String password) {
            this.id = id;
            this.username = username;
            this.password = password;
        }
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public String getUsername() {
            return username;
        }
    
        public void setUsername(String username) {
            this.username = username;
        }
    
        public String getPassword() {
            return password;
        }
    
        public void setPassword(String password) {
            this.password = password;
        }
    }
  • 相关阅读:
    HBase MapReduce 一些 ClassNotFoundException 所缺少的jar包
    Eclipse 连接不上 hadoop 的解决办法
    Log4j 2 配置
    mysql 查询结果显示行号
    js刷新页面方法 -- (转)
    python 错误--UnboundLocalError: local variable '**' referenced before assignment
    Webview 中FaultyInfo代码说明
    HTML中设置超链接字体 & 字体颜色
    apache log 按日期记录 格式 <GOOD>-- (转)
    linux 下 /bin /sbin 的区别 -- (转)
  • 原文地址:https://www.cnblogs.com/zoro-zero/p/4516298.html
Copyright © 2020-2023  润新知