最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android ListView分頁簡單實現(xiàn)

 更新時間:2017年06月01日 09:40:01   投稿:lqh  
這篇文章主要介紹了Android ListView分頁簡單實現(xiàn)的相關(guān)資料,需要的朋友可以參考下

Android ListView分頁簡單實現(xiàn)

分頁,開發(fā)應(yīng)用中必不可少。那么,現(xiàn)在就來實現(xiàn)分頁功能。

首先來想想實現(xiàn)它要有哪些步驟,

1, 實現(xiàn)的組件,
2、初始化第一頁數(shù)據(jù),
3,底部布局 ,
4,加載數(shù)據(jù)的條件
5、獲取下一頁的數(shù)據(jù)。

有了思路,我們一步步來實現(xiàn)就行了。先來想想我們用什么組件實現(xiàn),我們知道列表UI我們常用ListView或者RecyclerView,初始化數(shù)據(jù),我們就在通過一個for循環(huán)來準(zhǔn)備數(shù)據(jù),底部布局我們直接使ProgressBar控件和一個TextView來顯示就可以了。至于,加載的數(shù)據(jù),我們就使用OnScrollListener來監(jiān)聽滑動事件,然后在滿足加載條件時,我們就可以加載下一頁的數(shù)據(jù)了。

先來看看ListView實現(xiàn):

自定義ListView (LoadListView.Java):

public class LoadListView extends ListView implements AbsListView.OnScrollListener{
  private LayoutInflater mInflater;
  //判斷是否滾動最后一行
  private boolean isLastRow = false;
  //底部View布局
  private View mFooter;
  //實現(xiàn)接口加載更多數(shù)據(jù)
  public OnLoadMoreListener moreListener;

  public void setLoadMoreListener(OnLoadMoreListener moreListener){
    this.moreListener = moreListener;
  }
  public LoadListView(Context context) {
    super(context);
    initView();
  }

  public LoadListView(Context context, AttributeSet attrs) {
    super(context, attrs);
    initView();
  }

  public LoadListView(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    initView();
  }
  private void initView(){
    mInflater = LayoutInflater.from(getContext());
    mFooter = mInflater.inflate(R.layout.
    listview_footer,null);
    this.addFooterView(mFooter);
    mFooter.setVisibility(View.GONE);
    setOnScrollListener(this);
  }

  @Override
  public void onScrollStateChanged(AbsListView absListView, int scrollState) {
    //正在滾動時回調(diào),回調(diào)2-3次,手指沒拋則回調(diào)2次。scrollState = 2的這次不回調(diào)
    //回調(diào)順序如下
    //第1次:scrollState = SCROLL_STATE_TOUCH_SCROLL(1) 正在滾動
    //第2次:scrollState = SCROLL_STATE_FLING(2) 手指做了拋的動作(手指離開屏幕前,用力滑了一下)
    //第3次:scrollState = SCROLL_STATE_IDLE(0) 停止?jié)L動
    //當(dāng)屏幕停止?jié)L動時為0;當(dāng)屏幕滾動且用戶使用的觸碰或手指還在屏幕上時為1;
    //由于用戶的操作,屏幕產(chǎn)生慣性滑動時為2

    //當(dāng)滾到最后一行且停止?jié)L動時,執(zhí)行加載 
    if(isLastRow&&scrollState== OnScrollListener.SCROLL_STATE_IDLE){
      mFooter.setVisibility(View.VISIBLE);
      isLastRow = false;
      if(moreListener!=null){
        moreListener.loadMore();
      }
    }
  }

  @Override
  public void onScroll(AbsListView absListView, int firstVisibleItem,
             int visibleItemCount, int totalItemCount) {
    //滾動時一直回調(diào),直到停止?jié)L動時才停止回調(diào)。單擊時回調(diào)一次。
    //firstVisibleItem:當(dāng)前能看見的第一個列表項ID(從0開始)
    //visibleItemCount:當(dāng)前能看見的列表項個數(shù)(小半個也算)
    //totalItemCount:列表項共數(shù)
    //判斷是否滾到最后一行
    if (firstVisibleItem + visibleItemCount == totalItemCount && totalItemCount > 0) {
      isLastRow = true;
    }
  }
  public interface OnLoadMoreListener{
    void loadMore();
  }
}

底部布局listfooter.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:orientation="vertical">
  <ProgressBar
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_toLeftOf="@+id/id_loadmore"
    android:layout_marginRight="5dp" />
  <TextView
    android:id="@+id/id_loadmore"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="加載更多"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true"/>
</RelativeLayout>

MainActivity.java的源碼:

public class MainActivity extends Activity implements LoadListView.OnLoadMoreListener {
  private List<News> list = new ArrayList<>() ;
  private loadAdapter mAdapter;
  private LoadListView mListView;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    loadMoreData();
    mListView =(LoadListView) findViewById(R.id.id_list_view);
    mAdapter = new loadAdapter(this,list);
    mListView.setAdapter(mAdapter);
    mListView.setLoadMoreListener(this);
  }
  private void loadMoreData(){
    for(int i = 0 ; i <10;i++){
      News news = new News();
      news.setTitle("許巍");
      news.setContent("藍(lán)蓮花");
      list.add(news);
    }
  }

  @Override
  public void loadMore() {
    new Handler().postDelayed(new Runnable() {
      @Override
      public void run() {
        loadMoreData();
        showLoadMore();
      }
    },2000);

  }
  private void showLoadMore(){
    mAdapter.notifyDataSetChanged();
  }
}

LoadAdapter.java

public class loadAdapter extends BaseAdapter {
  private List<News> list;
  private Context mContext;
  public loadAdapter(Context context,List<News> list){
    this.list = list;
    this.mContext = context;
  }

  @Override
  public int getCount() {
    return list.size();
  }

  @Override
  public Object getItem(int position) {
    return position;
  }

  @Override
  public long getItemId(int position) {
    return position;
  }

  @Override
  public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder viewHolder;
    if(convertView==null){
      viewHolder = new ViewHolder();
      convertView = LayoutInflater.from(mContext).inflate(R.layout.item_news,null);
      viewHolder.title = (TextView) convertView.findViewById(R.id.id_title);
      viewHolder.content = (TextView)convertView.findViewById(R.id.id_content);
      convertView.setTag(viewHolder);
    }else {
      viewHolder = (ViewHolder) convertView.getTag();
    }
    viewHolder.title.setText(list.get(position).getTitle());
    viewHolder.content.setText(list.get(position).getContent());
    return convertView;
  }

  public class ViewHolder{
    private TextView title;
    private TextView content;
  }

}

activity_main.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent">
  <view.LoadListView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/id_list_view"
    />
</LinearLayout>

item_news.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/id_title"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:text=""
  android:gravity="center"
  android:padding="5dp"/>
  <TextView
    android:id="@+id/id_content"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text=""
    android:gravity="center"
    android:padding="5dp"/>
</LinearLayout>

其實只要掌握了OnScrollListener的回調(diào),那么就很簡單了。RecyclerView也出現(xiàn)很久了,慢慢的,RecyclerView也會替代了ListView,所以ListView分頁似乎就過時了,我們想知道的是RecyclerView怎么實現(xiàn)分頁。但是我們知道RecyclerView不能實現(xiàn)頭部和底部的添加,所以我們要自己來實現(xiàn)一個能添加頭部和底部的ReyclerView。

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關(guān)文章

  • 詳解Android中Service AIDL的使用

    詳解Android中Service AIDL的使用

    作為一名Android開發(fā)人員,如果沒聽過Service,那就有點說不過去了啊,Service是Android四大組件之一,它是不依賴于用戶界面的,就是因為Service不依賴與用戶界面,所以我們常常用于進行一些耗時的操作,比如:下載數(shù)據(jù)等;本文將詳細(xì)介紹Android中Service AIDL的使用。
    2021-06-06
  • flutter實現(xiàn)底部抽屜效果

    flutter實現(xiàn)底部抽屜效果

    這篇文章主要為大家詳細(xì)介紹了flutter實現(xiàn)底部抽屜效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • android自定義等級評分圓形進度條

    android自定義等級評分圓形進度條

    這篇文章主要為大家詳細(xì)介紹了android自定義等級評分圓形進度條,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • Android編程實現(xiàn)自定義Tab選項卡功能示例

    Android編程實現(xiàn)自定義Tab選項卡功能示例

    這篇文章主要介紹了Android編程實現(xiàn)自定義Tab選項卡功能,結(jié)合完整實例形式分析了Android自定義tab選項卡的遍歷、設(shè)置及屬性操作相關(guān)技巧,需要的朋友可以參考下
    2017-02-02
  • Flutter pageview切換指示器的實現(xiàn)代碼

    Flutter pageview切換指示器的實現(xiàn)代碼

    這篇文章主要介紹了Flutter pageview切換指示器的實現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Android 在子線程中更新UI的幾種方法示例

    Android 在子線程中更新UI的幾種方法示例

    本篇文章主要介紹了Android 在子線程中更新UI的幾種方法示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-08-08
  • Android WebView 常見問題及處理方案

    Android WebView 常見問題及處理方案

    這篇文章主要介紹了Android WebView 常見問題及處理方案,需要的朋友可以參考下
    2015-08-08
  • android中使用SharedPreferences進行數(shù)據(jù)存儲的操作方法

    android中使用SharedPreferences進行數(shù)據(jù)存儲的操作方法

    本篇文章介紹了,在android中使用SharedPreferences進行數(shù)據(jù)存儲的操作方法。需要的朋友參考下
    2013-04-04
  • flutter Toast實現(xiàn)消息提示框

    flutter Toast實現(xiàn)消息提示框

    這篇文章主要為大家詳細(xì)介紹了flutter Toast實現(xiàn)消息提示框,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • Android實現(xiàn)炫酷的CheckBox效果

    Android實現(xiàn)炫酷的CheckBox效果

    大家是不是對系統(tǒng)自帶的CheckBox產(chǎn)生乏味感了呢?今天這篇文章給大家?guī)淼氖且豢钊碌腃heckBox,下面來一起看看下面的CheckBox吧!有需要的朋友們可以參考借鑒。
    2016-10-10

最新評論

绥江县| 铅山县| 千阳县| 深圳市| 阜康市| 安国市| 嘉祥县| 巩留县| 台安县| 呈贡县| 镶黄旗| 库尔勒市| 湘潭县| 屏东市| 祁东县| 松桃| 吴江市| 兰州市| 沁源县| 米泉市| 嘉鱼县| 诏安县| 盐源县| 深水埗区| 九台市| 囊谦县| 台江县| 乐陵市| 南阳市| 修水县| 楚雄市| 胶州市| 阿勒泰市| 新民市| 阳西县| 澳门| 富民县| 陇南市| 隆昌县| 黎城县| 叶城县|