Android开发中listview的动态加载的操作技巧

来源:爱站网时间:2020-12-26编辑:网友分享
listview在Android网络开发中是经常使用的控件,而在加载数据的过程中,它并不是一次加载所有数据,想要学习的程序员,就随爱站技术频道小编来看看Android开发中listview的动态加载的操作技巧吧!

listview在Android网络开发中是经常使用的控件,而在加载数据的过程中,它并不是一次加载所有数据,想要学习的程序员,就随爱站技术频道小编来看看Android开发中listview的动态加载的操作技巧吧!

最近在研究网络数据加载的问题,比如我有几百,甚至上千条数据,这些数据如果一次性全部加载到arraylist,然后再加载到Listview中。我们必然会去单独开线程来做,这样造成的结果就是会出现等待时间很长,用户体验非常不好。我的想法是动态加载数据,第一次加载十条,然后往下面滑动的时候再追加十条,再往下面滑动的时候再去追加,这样大大减少了用户等待的时间,同时给处理数据留下了时间。网上看到了这样一个例子,挺好的,我改动了一下,达到了我想要的结果。

Java代码:

package org.developerworks.android;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.BaseAdapter;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AbsListView.OnScrollListener;
import android.widget.LinearLayout.LayoutParams;
public class ListViewForLoading extends Activity implements OnScrollListener {
  private listViewAdapter adapter = new listViewAdapter();
  ListView listView;
  LinearLayout loadingLayout;
  private Thread mThread;
  /** * 设置布局显示属性 */
  private LayoutParams mLayoutParams = 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;
  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    init();
  }
  private void init() {
    // TODO Auto-generated method stub
    // 线性布局
    LinearLayout layout = new LinearLayout(this);
    // 设置布局 水平方向
    layout.setOrientation(LinearLayout.HORIZONTAL);
    // 进度条
    progressBar = new ProgressBar(this);
    // 进度条显示位置
    progressBar.setPadding(0, 0, 15, 0);
    // 把进度条加入到layout中
    layout.addView(progressBar, mLayoutParams);
    // 文本内容
    TextView textView = new TextView(this);
    textView.setText("加载中...");
    textView.setGravity(Gravity.CENTER_VERTICAL);
    // 把文本加入到layout中
    layout.addView(textView, FFlayoutParams);
    // 设置layout的重力方向,即对齐方式是
    layout.setGravity(Gravity.CENTER);
    // 设置ListView的页脚layout
    loadingLayout = new LinearLayout(this);
    loadingLayout.addView(layout, mLayoutParams);
    loadingLayout.setGravity(Gravity.CENTER);
    // 得到一个ListView用来显示条目
    listView = (ListView) findViewById(R.id.tv);
    // 添加到脚页显示
    listView.addFooterView(loadingLayout);
    // 给ListView添加适配器
    listView.setAdapter(adapter);
    // 给ListView注册滚动监听
    listView.setOnScrollListener(this);
  }
  /**
   * 要用用于生成显示数据
   *
   * @author huangbq
   */
  class listViewAdapter extends BaseAdapter {
    int count = 10;
    public int getCount() {
      return 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;
      if (v == null) {
        view = new TextView(ListViewForLoading.this);
      } else {
        view = (TextView) v;
      }
      view.setText("ListItem " + pos);
      view.setTextSize(20f);
      view.setGravity(Gravity.CENTER);
      view.setHeight(60);
      return view;
    }
  }
  @Override
  public void onScroll(AbsListView view, int firstVisibleItem,
      int visibleItemCount, int totalItemCount) {
    // TODO Auto-generated method stub
    if (firstVisibleItem + visibleItemCount == totalItemCount) {
      // 开线程去下载网络数据
      if (mThread == null || !mThread.isAlive()) {
        mThread = new Thread() {
          @Override
          public void run() {
            try {
              // 这里放你网络数据请求的方法,我在这里用线程休眠5秒方法来处理
              Thread.sleep(5000);
            } catch (InterruptedException e) {
              e.printStackTrace();
            }
            Message message = new Message();
            message.what = 1;
            handler.sendMessage(message);
          }
        };
        mThread.start();
      }
    }
  }
  @Override
  public void onScrollStateChanged(AbsListView view, int scrollState) {
    // TODO Auto-generated method stub
  }
  private Handler handler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
      // TODO Auto-generated method stub
      switch (msg.what) {
      case 1:
        if (adapter.count 

main.xml别忘了加这段了

通过爱站技术频道小编介绍的Android开发中listview的动态加载的操作技巧,相信大家已经了解了,程序员需要谨慎的是项目是否能顺利如期的开发出来。

上一篇:Android开发中读文件和写文件到存储卡的方法

下一篇:Android开发定制文本视图省略号的操作技巧

您可能感兴趣的文章

相关阅读

热门软件源码

最新软件源码下载