Android:适配器及适配器控件

什么是适配器?

下图展示了数据源、适配器、ListView等数据展示控件之间的关系。我们知道,数据源是各种各样的,而ListView所展示数据的格式则是有一定的要求的。数据适配器正是建立了数据源与ListView之间的适配关系,将数据源转换为ListView能够显示的数据格式,从而将数据的来源与数据的显示进行解耦,降低程序的耦合性。这也体现了Android的适配器模式的使用。对于ListView、GridView等数据展示控件有多种数据适配器,本文讲解最通用的数据适配器——BaseAdapter。
Android:适配器及适配器控件_第1张图片

使用方法

1.在布局文件中引用ListView


<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

<ListView
    android:id="@+id/listView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">ListView>

RelativeLayout>

2.编写ListView布局,这里为了避免复杂只使用了一个TextView


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
        android:id="@+id/text"
        android:gravity="center"
        android:textSize="17dp"
        android:textColor="#000"
        android:paddingVertical="5dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
LinearLayout>

3.Activity中的代码

public class MainActivity extends AppCompatActivity {
    private ListView listView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        listView=findViewById(R.id.listView);

        //将数组中的数据绑定到listView
        final String[] strings=new String[]{"张三","李四","王五"};

        /*BaseAdapter适配器至少要实现getCount和getView方法
          getCount决定了list的数目,getView决定了每个视图
        */
        listView.setAdapter(new BaseAdapter() {
            @Override
            public int getCount() {

                return strings.length;
            }

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

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

            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
               //创建一个视图
                convertView=View.inflate(MainActivity.this,R.layout.item,null);
                //设置数据
                TextView textView=convertView.findViewById(R.id.text);
                textView.setText(strings[position]);
                //最后将视图返回
                return convertView;
            }
        });
    }
}

最后我们来看看效果吧
Android:适配器及适配器控件_第2张图片

你可能感兴趣的