1. 程式人生 > >在ViewPager中新增ListView

在ViewPager中新增ListView

有時候我們需要在ViewPager中加入ListView 實現各個分頁之間左右滑動,ListView分頁上上下滑動

實現的方法大致如下:

首先我們為ListView設定一個佈局檔案 list1.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"> <ListView android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/listview"></ListView> </LinearLayout>
接下來我們設定一下ListView的樣式 item_listview.xml
<?xml version="1.0" encoding="utf-8"?>
<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="wrap_content" tools:context="com.cx.imooc.MainActivity" > <CheckBox android:focusable="false" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/checkbox"
android:layout_alignParentRight="true" android:layout_centerVertical="true"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/title" android:textSize="16sp" android:text="Android新技能" android:textColor="#444" android:singleLine="true" android:layout_alignParentLeft="true"/> <TextView android:id="@+id/context" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/title" android:layout_marginTop="10dp" android:layout_toLeftOf="@+id/checkbox" android:text="Android打造萬能的ListView" android:minLines="1" android:maxLines="2" android:textSize="16sp" android:textColor="#898989" /> <TextView android:id="@+id/time" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/context" android:layout_marginTop="10dp" android:text="2013-12-12" android:textSize="16sp" android:textColor="#898989" /> <TextView android:id="@+id/phone" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/context" android:layout_marginTop="10dp" android:text="18848900900" android:textSize="16sp" android:textColor="#fff" android:drawableLeft="@drawable/phone" android:layout_alignParentRight="true" android:drawablePadding="5dp" android:paddingRight="3dp" android:background="#1161D6" android:gravity="center" /> </RelativeLayout>
我們另外設定3個TextView實現分頁效果,在這裡就不貼程式碼了

在MainActivity中我們宣告一個List<View>來儲存View,宣告一個ListView 一個PagerAdapter

private ListView listView ;
private ViewPager viewPager;
private PagerAdapter pagerAdapter;
private List<View> views = new ArrayList<View>();
private List<Bean> mDatas;
接下來我們對資料進行初始化
private void initDatas() {
    mDatas = new ArrayList<Bean>();
    for(int i = 1;i<=10;i++) {
        Bean bean = new Bean("AndroidGet"+i, "ac", "2015-11-11", "1884896xxxx");
mDatas.add(bean);
}
}
完成後首先對PagerAdapter進行初始化
viewPager = (ViewPager) findViewById(R.id.viewpager);

接下來對layoutInflater例項化

LayoutInflater layoutInflater = LayoutInflater.from(this);
View t1=layoutInflater.inflate(R.layout.list2,null);
View t2=layoutInflater.inflate(R.layout.list3,null);
View t3=layoutInflater.inflate(R.layout.list1,null);
View t4=layoutInflater.inflate(R.layout.list4,null);
讀取4個View

這段程式碼首先我們對listview進行初始化,listview因為不在主佈局檔案中,所以我們沒有辦法直接通過findviewbyId(R.id.listview)來讀取 不然會發生空指標錯誤

所以我們首先將listview所在的佈局檔案例項化

View t3=layoutInflater.inflate(R.layout.list1,null);

接著我們就通過 listview = (ListView)t3.findviewbyId(R.id.listview) 來讀取出listview

接下來通過listview.setAdapter()來設定Adapter 

listView = (ListView) t3.findViewById(R.id.listview);
listView.setAdapter(new CommonAdapter<Bean>(MainActivity.this, mDatas, R.layout.item_listview) {
        @Override
public void Convert(ViewHolder viewHolder, final Bean bean) {
            viewHolder.setText(R.id.title, bean.getTitle());
viewHolder.setText(R.id.context, bean.getContext());
viewHolder.setText(R.id.time, bean.getTime());
viewHolder.setText(R.id.phone, bean.getPhone());
            final CheckBox cb = viewHolder.getView(R.id.checkbox);
cb.setChecked(bean.isChecked());
cb.setOnClickListener(new View.OnClickListener() {
                @Override
public void onClick(View v) {
                    bean.setChecked(cb.isChecked());
}
            });
}
    });
在這裡我使用的是自定義的Adapter和viewHolder 

大家需要根據自己的ListView寫對應的Adapter和viewHolder

接下來我們將這三個TextView 一個ListView加入List<View>中併為ViewPager設定Adapter

views.add(t1);
views.add(t2);
views.add(t3);
views.add(t4);
pagerAdapter = new PagerAdapter() {
    @Override
public int getCount() {
        return views.size();
}

    @Override
public boolean isViewFromObject(View view, Object object) {
        return view==object;
}

    @Override
public Object instantiateItem(ViewGroup container, int position) {
        View view= views.get(position);
container.addView(view);
        return view;
}

    @Override
public void destroyItem(ViewGroup container, int position, Object object) {
        container.removeView(views.get(position));
}
};
viewPager.setAdapter(pagerAdapter);
重點需要注意的是以下這段程式碼
View t3=layoutInflater.inflate(R.layout.list1,null);
listView = (ListView) t3.findViewById(R.id.listview);
我們必須先將ListView所在的佈局檔案例項化後 才可以進行findViewById操作 不然會報錯!

如果大家還有什麼疑問 留言我們一起交流 

效果如下





相關推薦

ViewPager新增ListView

有時候我們需要在ViewPager中加入ListView 實現各個分頁之間左右滑動,ListView分頁上上下滑動 實現的方法大致如下: 首先我們為ListView設定一個佈局檔案 list1.xml <?xml version="1.0" encoding="ut

Excel新增Listview控制元件方法

1  新增控制元件程式。(如本地電腦已有,可忽略)把下面的檔案解壓後儲存在  C:\WINDOWS\system32目錄下2  註冊控制元件程式開始--執行--輸入 regsvr32.exeMSCOMCTL.OCX3  新增引用進入VBE 編輯器,【工具】-【引用】,勾選

ViewPager新增Fragment的方法實現

有時候我們在使用ViewPager的時候可以向裡面加入一個自定義的view,也可以加入一個Fragment,那如何加入Fragement 建立一個Viewpager的介面卡,然後需要繼承FragementPagerAdapter類,在該類中,需要建立一個構造方法,實現ge

AlertDialog新增listview以及幾種進度dialog的對比

private Context context;private TextView tv1,tv2,tv3,tv4;private LinearLayout ll_main;List<Map<String, String>> nameList = new ArrayList<Map

fragment ScrollView 同時巢狀viewpager banner和 listview, scrollview 滑動異常·

fragment中 ScrollView                      同時巢狀viewpager banner和        &nbs

emWinLISTVIEW單元格新增資訊

如果LISTVIEW原為空表,在向單元格中新增資訊前,需先新增行:LISTVIEW_AddRow(hItem, NULL); 然後再使用函式void             LISTVIEW_SetItemText   &

ViewPager動態新增XML佈局檔案,並獲取XML檔案控制元件ID的操作(inflate)

Step 1: 佈局檔案中新增viewpager和切換頁面button <spanstyle="font-size:18px;"><RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/a

解決ScrollView巢狀viewPager巢狀listView滑動事件衝突問題(水平方向)

我們在開發中經常會碰到view滑動衝突的情況。滑動衝突的解決辦法就兩種:1.外部攔截法:是指在點選事件先經過父容器的攔截處理,如果父容器需要處理此事件就進行攔截,如果不需要此事件就不攔截,這樣就可以解決滑動衝突的問題,外部攔截法需要重寫父容器的onInterceptTouch

【WinForm】執行緒listview新增資料

在使用listview的時候,因為處理的資料較多,為防止在處理資料時出現假死的狀態出現卡的情況,我們使用委託進行處理新增資料 定義委託 private delegate void AddListView(ListViewItem item); 定義新增資料的方法 /// &

Viewpager巢狀ListView

原文地址:http://spacetech.dk/android-viewpager-with-listview-pages.html MainActivity package com.example.koreancoursetest; import java.util.

利用多行文字框向listview新增內容

  //新增按鍵中的方法 private void btnMemberIDAdd_Click(object sender, EventArgs e)         {             List<string> lst = new List<str

轉載 viewpager徹底性動態新增、刪除Fragment

viewpager巢狀fragment是一個比較帥氣的使用,但是問題多多,畢竟沒怎麼用過。之前viewpager的使用頂多是在應用開始的介紹頁,viewpager內嵌幾張介紹圖片,其實這個使用是比較常規的;假如巢狀佈局搞的複雜點,如自定義view/fragm

ListView新增item為WebView

今天在做一個demo,是要把一個WebView當做ListView的item加入到ListView中去,查找了點資料,然後自己實現了一個,發現是可以做出來的,只是在ListView中加入的這個WebView的上下滾動有點問題,好像是WebView的滾動條和ListView的

viewpager動態新增view,並實現偽無限迴圈

        viewpager的使用,大家都熟悉,它可以實現頁面之間左右滑動的切換,這裡有一個需求,就是viewpager裡面載入的頁數不是確定的,而是根據資料的多少來確定的。常見的應用就是在一個新聞的詳細頁面中,顯示與此新聞有關的圖片。         下面我們來看一

解決fragment與viewpager一起使用時fragmentlistview資料出現重複

activity中需要顯示一個切換頁顯示3個不同的檢視資料,這裡需要使用viewpager+fragment實現切換。在fragment中需要在onstart或者onresume中初始化載入資料。但是viewpager在切換fragment時會呼叫下一個fragmen

關於listview新增一條記錄時,最後兩條訊息重複的問題。

經過檢查發現原來是在新增到list佇列中的hashmap在新增一個list的沒有重新new一個,就直接新增進去了,當然會幹掉以前的最後一條訊息,然後又新增一條訊息,所以最後的結果是最後的兩條訊息時重複

winfrom如何在listview新增控制元件

private Button btn = new Button(); private void Form1_Load(object sender, EventArgs e) { ListViewItem

ListView新增CheckBox,進行多項選擇,全選,反選,完美無Bug

新手筆記: 最近做一個列表,實現批量選擇刪除功能,用到了ListView中新增的CheckBox,來進行多項選擇,全選,反選等。因為用到了ListView,故對新手來說,有很多坑。 1、由於ListView採用了Recycler,即重複利用convertView,所以用Ch

WinformlistView控制元件從資料庫新增資料的方法

繫結資料庫資料到listview中,有兩種方式 第一種:使用SqlDateReader public void BindData() {//連線資料庫string strcon="server=.;database=student;uid=sa;pwd=123456;";S

Oracle12.2新增的分區功能

功能 防止 新功能 時間 如果 針對 alt 關鍵字 只讀 Oracle 12.2已經發布一段時間,公網上也可以下載試用。針對12.2,partitioning(分區)也有了不少增強。自動列表分區多字段列表分區只讀分區分區維護時允許過濾在線轉換非分區表為分區表帶分區的外部