ListView加載兩種以上不同的布局


不同的項目布局(item layout)

 

Listview一種單一的item 布局有時候不能完全滿足業務需求,我們需要加載兩種或兩種以上不同的布局,實現方法很簡單:

  • 重寫 getViewTypeCount() – 返回你有多少個不同的布局
  • 重寫 getItemViewType(int) – 由position返回view type id
  • 根據view item的類型,在getView中創建正確的convertView

代碼:

 1 public class MainActivity extends AppCompatActivity {
 2 
 3 
 4 
 5     @Override
 6     protected void onCreate(Bundle savedInstanceState) {
 7         super.onCreate(savedInstanceState);
 8         setContentView(R.layout.activity_main);
 9         Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
10         toolbar.setTitle("測試");
11         setSupportActionBar(toolbar);
12 
13         ListView listView = (ListView) findViewById(R.id.listview);
14         listView.setAdapter(new ListviewAdapter());
15     }
16 
17 
18 
19     class ListviewAdapter extends BaseAdapter {
20 
21         @Override
22         public int getCount() {
23             return 50;
24         }
25 
26         @Override
27         public Object getItem(int position) {
28             return null;
29         }
30 
31         @Override
32         public long getItemId(int position) {
33             return 0;
34         }
35 
36 
37         @Override
38         public View getView(int position, View convertView, ViewGroup parent) {
39             View view = null;
40             int type = getItemViewType(position);
41             switch (type) {
42                 case 0:
43                     view = LayoutInflater.from(MainActivity.this).inflate(R.layout.listviewitem, parent, false);
44                     TextView tv = (TextView) view.findViewById(R.id.item_tv);
45                     tv.setText("textView" + position);
46                     break;
47                 case 1:
48                     view = LayoutInflater.from(MainActivity.this).inflate(R.layout.listviewpic, parent, false);
49                     break;
50             }
51             return view;
52         }
53 
54         @Override
55         public int getViewTypeCount() {
56             //多少種布局
57             return 2;
58         }
59 
60         @Override
61         public int getItemViewType(int position) {
62             return position % 4 == 0 ? 1 : 0;
63         }
64 
65     }
66 }

運行效果,每三個item一個分隔圖片


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM