适配器模式在Android Studio中主要应用于将数据从数据源(如集合、游标等)展示到相应的视图(如AutoCompleteTextView、Spinner、ListView、GridView等)。它通过桥梁的形式连接AdapterView控件和数据源,提供访问数据源的入口。
适配器模式的实现原理类似于数据模型,M负责存放数据,通过控制器C将数据显示在相应的视图V上。常用的数据源包括数据、集合、游标。适配器方面,有ArrayAdapter、SimpleAdapter、SimpleCursorAdapter和BaseAdapter等。
在这些适配器中,AutoCompleteTextView可以与ArrayAdapter配合使用,根据用户的输入弹出智能提示的下拉列表。而Spinner则可以与ArrayAdapter配合使用,实现下拉列表的选择功能。ListView和GridView则可以与不同的适配器配合使用,实现不同样式的列表和网络图展示。
基本步骤如下:
1. 创建数据源和AdapterView控件;
2. 创建适配器;
3. 绑定数据源。
以AutoCompleteTextView+ArrayAdapter适配器为例,首先需要创建一个数据源,然后创建一个AutoCompleteTextView控件。接着,创建一个ArrayAdapter适配器,并设置相关的参数,如上下文对象、布局文件ID、数据数组等。最后,将适配器绑定到AutoCompleteTextView控件上。
以下是一个简单的示例代码:
```java
// 创建数据源
String[] data = {"选项1", "选项2", "选项3"};
List
// 创建AutoCompleteTextView控件
autoCompleteTextView = findViewById(R.id.auto_complete_text_view);
// 创建ArrayAdapter适配器并设置参数
ArrayAdapter
adapter.setDropDownViewResource(R.layout.dropdown_item);
// 将适配器绑定到AutoCompleteTextView控件上
autoCompleteTextView.setAdapter(adapter);
```
在这个示例中,我们首先创建了一个字符串数组作为数据源,然后将其转换为List集合。接着,我们创建了一个AutoCompleteTextView控件,并为其设置了适配器。最后,我们将适配器绑定到AutoCompleteTextView控件上。
```java
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
AutoCompleteTextView autoCompleteTextView = findViewById(R.id.autoCompletetextview);
String[] countries = {"中国", "美国", "英国", "澳大利亚"};
ArrayAdapter
autoCompleteTextView.setAdapter(adapter);
}
}
```
```java
package com.example.adapter;
import androidx.appcompat.app.AppCompatActivity;
import android.graphics.Color;
import android.os.Bundle;
import android.widget.Adapter;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
public class MainActivity extends AppCompatActivity {
// 定义全局变量
private AutoCompleteTextView autoCompleteTextView;
// 适配器变量
private ArrayAdapter
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 定义数据源
String[] context = new String[]{
"China", "Britain", "Russia", "Canada", "U.S.A", "Chile", "Germany"
};
// 绑定控件
autoCompleteTextView = (AutoCompleteTextView) findViewById(R.id.autoCompletetextview);
// 创建Adapter
adapter = new ArrayAdapter
// 将控件绑定到适配器
autoCompleteTextView.setAdapter(adapter);
// 设置输入的字符的颜色
autoCompleteTextView.setTextColor(Color.YELLOW);
// 设置输入1个字符后开始提示
autoCompleteTextView.setThreshold(1);
}
}
```
Spinner控件+ArrayAdapter适配器
Spinner是下拉列表控件,当用户点击控件时,下拉列表控件弹出选项列表给用户选择,每次只显示用户选择的选项。Spinner可以有两种方式加载数据:1、在res/values文件下准备一个数组资源文件,事先定义好要加载的数据资源;2、直接在java代码中使用ArrayAdapter对象。获取用户点击的下拉列表的选项,可以使用setOnItemSelectedListener()方法。
方法一代码:
布局页面XML代码:
```xml
android:layout_width="match_parent" android:layout_height="match_parent"> android:id="@+id/spinner" android:layout_width="wrap_content" android:layout_height="wrap_content" />
```
Java代码:
```java
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
private Spinner spinner;
private ArrayAdapter
private String[] data = {"选项1", "选项2", "选项3"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
spinner = findViewById(R.id.spinner);
adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, data);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView> parent, View view, int position, long id) {
String selectedItem = data[position];
// 根据选中的项执行相应操作
}
@Override
public void onNothingSelected(AdapterView> parent) {
// 当没有选中任何项时执行的操作
}
});
}
}
```