当前位置:   article > 正文

Android:View&Adapter

Android:View&Adapter

3.11 View&Adapter

View是视图文件,表示页面的框架结构。Adapter适配器,通过适配器填充数据信息

1、简单ListView使用

    ListView用来显示一个相同样式的视图列表。

    ListView无法直接将数据显示,需要先将Data数据放入Adapter适配器,然后ListView绑定适配器。

操作步骤:

    1.在layout布局中创建ListView;

    2.在layout对应ActivityActivity中创建对应ListView对象listView;

    3.创建数据ArrayList<String>类型的list;

    4.创建ListViewAdapter类继承BaseAdapter,在Activity中创建ListViewAdapter类对象listViewAdapter,传入参数list,上下文;

    5.调用listView对象的setAdapter方法,绑定listViewAdapter;

示例:

创建t_listview.xml文件,ListView标签,设置id。

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:orientation="vertical"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent">
  6. <ListView
  7. android:id="@+id/ListView1"
  8. android:layout_width="match_parent"
  9. android:layout_height="match_parent">
  10. </ListView>
  11. </LinearLayout>

创建ListViewAdapter类继承BaseAdapter类。

  1. public class ListViewAdapter extends BaseAdapter {
  2. private ArrayList<String> strlists;
  3. private Context mContext;
  4. public ListViewAdapter(ArrayList<String> list,Context context){
  5. this.strlists=list;
  6. this.mContext=context;
  7. }
  8. //获取list大小
  9. @Override
  10. public int getCount() {
  11. return strlists.size();
  12. }
  13. @Override
  14. public Object getItem(int position) {
  15. return null;
  16. }
  17. @Override
  18. public long getItemId(int position) {
  19. return position;
  20. }
  21. //创建空的View,放入数据
  22. //position当前位置
  23. //ViewGroup parent:每次调用都有一个空容器,返回值的view添加到空容器,getContext方法获取容器context
  24. //convertView:ItemView显示内容
  25. @Override
  26. public View getView(int position, View convertView, ViewGroup parent) {
  27. //创建一个空TextView
  28. TextView textView = new TextView(mContext);
  29. //设置宽高
  30. textView.setLayoutParams(new AbsListView.LayoutParams(AbsListView.LayoutParams.MATCH_PARENT,
  31. AbsListView.LayoutParams.WRAP_CONTENT));
  32. //设置文本大小
  33. textView.setTextSize(30);
  34. //设置文本
  35. textView.setText(strlists.get(position));
  36. return textView;
  37. }
  38. }

创建ListViewActivity类继承Activity。

  1. public class ListViewActivity extends Activity {
  2. //上下文
  3. private Context mContext;
  4. private ListView listView;
  5. @Override
  6. protected void onCreate(Bundle savedInstanceState) {
  7. super.onCreate(savedInstanceState);
  8. //绑定layout
  9. setContentView(R.layout.t_listview);
  10. //上下文初始化
  11. mContext = ListViewActivity.this;
  12. //获取ListView
  13. listView = (ListView) findViewById(R.id.ListView1);
  14. //创建数据list
  15. ArrayList<String> list = new ArrayList<String>();
  16. //添加数据
  17. for(int i=0;i<5;i++){
  18. list.add("listView"+i);
  19. }
  20. //创建ListViewAdapter对象
  21. ListViewAdapter listViewAdapter = new ListViewAdapter(list,mContext);
  22. //ListView绑定Adapter
  23. listView.setAdapter(listViewAdapter);
  24. }
  25. }

2、BaseAdpater优化

1.使用LayoutInfalter优化

当ListView中的内容不是简单的字符串表时,ListViewAdpater类中的getView方法中就不是简单创建一个TextView可以解决问题,需要创建多个View组件,这个时候,我们需要根据ListView中子Item的结构自动生成View组件。

示例:

创建子Item的布局文件t_listview_item.xml。

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:orientation="vertical"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent">
  6. <TextView
  7. android:id="@+id/tv1"
  8. android:layout_width="match_parent"
  9. android:layout_height="wrap_content"
  10. android:textSize="30dp">
  11. </TextView>
  12. </LinearLayout>

修改getView方法中逻辑:

  1. //LayoutInflater类将一个布局变成一个类
  2. LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
  3. //inflate参数1:布局页面,参数2:root是否加入到某个容器
  4. View view = layoutInflater.inflate(R.layout.t_listview_item,null);
  5. TextView textView = view.findViewById(R.id.tv1);
  6. textView.setText(strlists.get(position));
  7. return view;

Android提供一些固定的子Item布局:

示例:

  1. //android提供了一些布局页面android.R.layout.XXXX
  2. //示例:android.R.layout.simple_list_item_1
  3. View view1= layoutInflater.inflate(android.R.layout.simple_list_item_1,null);

2.使用convertView优化

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/69432
推荐阅读
相关标签
  

闽ICP备14008679号