三种Adapter的使用方法
1、simpleAdapter使用(3步:准备样式,准备数据,配置适配器)
1).adapter方法说明
1.前后端数据分离
2.不能通过list更行数据,而是通过adapter实例更新数据
2).插入一个listview ,创建 listview 样式xml文件
activity_main.xml
<ListView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:divider="#5E5E5E"
android:dividerHeight="2dp"
tools:ignore="MissingConstraints">
</ListView>
listview.xml(自定义list样式文件)
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/tv_1"
android:layout_width="80dp"
android:layout_height="54dp">
</TextView>
<TextView
android:id="@+id/tv_2"
android:layout_width="80dp"
android:layout_height="54dp">
</TextView>
<TextView
android:id="@+id/tv_3"
android:layout_width="80dp"
android:layout_height="54dp">
</TextView>
</LinearLayout>
3).准备数据源,插入数据源
private String[] name = {
"a","b","c"};
private String [] des = {
"aa","bb","cc"};
private int [] id={
1,2,3};
这里的key名随便取,只要后面与simpleAdapter里的String[] from 对应就好。
List<Map<String,Object>> maps = new ArrayList<Map<String,Object>>();
for (int i = 0 ; i < name.length ;i++){
Map<String,Object> map = new HashMap<>();
map.put("name",name[i]);
map.put("des",des[i]);
map.put("id",id[i]);
maps.add(map);
}
4).配置simpleAdapter,并配置listview
/*
属性一:插入一个活动界面
属性二:插入要使用的数据
属性三:通过layout属性关联listView 样式
属性四:map中key值数组,key中是什么就是什么
属性五:关联listView的listView样式组件id
添加适配器
*/
SimpleAdapter simpleAdapter = new SimpleAdapter(getApplicationContext(),
maps,
R.layout.listview,
new String[]{
"name","des","id"},
new int[]{
R.id.tv_1,R.id.tv_2,R.id.tv_3});
listView.setAdapter(simpleAdapter);
5).点击事件Demo
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
String result = adapterView.getItemAtPosition(i).toString();
Toast.makeText(MainActivity.this,"你点击了"+result,Toast.LENGTH_SHORT).show();
}
});
2、baseAdapter使用
1).adapter方法说明
/*
*1、适配器中数据集的数据个数
*2、获取数据集中与索引对应的数据项
*3、获取指定行ID
*4、获取每一行Item的内容
*/
@Override
public int getCount() {
return list.size();}
@Override
public Object getItem(int i) {
return null;}
@Override
public long getItemId(int i) {
return 0;}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
}
2).创建adapter并继承BaseAdapter
自定义adapter java 代码
package com.example.luckydraw.Util;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import com.example.luckydraw.R;
import java.util.List;
public class NumAdapter extends BaseAdapter {
private List<String> list;
private Context context;
/*
1、Context:传递当前activity 内容
2、List:需要适配的数据
*/
public NumAdapter(Context context , List<String> list){
super();
this.context = context;
this.list = list;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int i) {
return null;
}
@Override
public long getItemId(int i) {
return 0;
}
public void remove(int i){
for(int x=i;x>0;x--){
list.remove(x-1);
notifyDataSetChanged();
}
}
/*
*1、通过 LayoutInflater 获取 Activity
*2、因为在 activity中设置了listview,
* 现在通过 view = inflater.inflate(R.layout.list,null) 绑定list样式
*3、创建一个 ViewHolder 内部类绑定list样式组件,并返回 view
*/
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
LayoutInflater inflater = LayoutInflater.from(context);
ViewHolder viewHolder = null;
if (view == null){
view = inflater.inflate(R.layout.list,null);
viewHolder = new ViewHolder();
viewHolder.tv = view.findViewById(R.id.tv);
view.setTag(viewHolder);
}else {
viewHolder = (ViewHolder) view.getTag();
}
viewHolder.tv.setText(list.get(i));
return view;
// TextView textView = new TextView(context);
// textView.setText(list.get(i));
// return textView;
}
class ViewHolder{
public TextView tv;
}
}
3).创建一个 listview xml 文件和样式文件
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ListView
android:id="@+id/list_item"
android:layout_width="match_parent"
android:layout_height="282dp">
</ListView>
</LinearLayout>
样式文件 list.xml
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginTop="4dp"
android:layout_marginLeft="12dp">
<TextView
android:id="@+id/tv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="40dp"
android:text="啦啦啦">
</TextView>
</LinearLayout>
4).在 MainActivity中 使用
使用不难,
private NumAdapter adapter;
private List list = new ArrayList<>();
adapter = new NumAdapter(getApplicationContext(), list);
listItem.setAdapter(adapter);
点击事件,
@OnClick(R.id.bt_draw)
public void onBtDrawClicked() {
if (edNum.getText().toString().trim().length() == 0 || etNum2.getText().toString().trim().length() == 0) {
ToastUtile.showText(this, "请输入范围");
} else if ((Integer.parseInt(edNum.getText().toString()) < (Integer.parseInt(etNum2.getText().toString())))) {
ToastUtile.showText(this, "范围数据出错");
return;
} else {
int i = Integer.parseInt(edNum.getText().toString());
int j = Integer.parseInt(etNum2.getText().toString());
int x;
Random random = new Random();
while ((x = random.nextInt(i) + 1) < j) {
x = random.nextInt(i) + 1;
}
String s = String.valueOf(x);
s = "" + n++ + "、" + " 恭喜抽中了:" + s + "号同学";
if (checkbox.isChecked()) {
ToastUtile.showText(this, s);
}
list.add(s);
adapter.notifyDataSetChanged();
}
}
@OnClick(R.id.bt_clear)
public void onBtClearClicked() {
adapter.remove(list.size());
n = 1;
}
3、arrayAdapter使用
1). 直接引用String-array中的数据
xml文件
<ListView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:divider="#5E5E5E"
android:dividerHeight="2dp"
android:entries="@array/data"
tools:ignore="MissingConstraints">
//entries 属性引用数据
</ListView>
java代码块
public class MainActivity extends AppCompatActivity {
private ListView listView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
listView = findViewById(R.id.list);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
String result = adapterView.getItemAtPosition(i).toString();//获取选择项的值
Toast.makeText(MainActivity.this,"你点击了"+result,Toast.LENGTH_SHORT).show();
}
});
}
}
2). 另一种引用数据方法
xml文件:比上面少了一个entries 属性引用外部数据
<ListView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:divider="#5E5E5E"
android:dividerHeight="2dp"
tools:ignore="MissingConstraints">
</ListView>
java文件(核心就三步:绑定组件、准备数据和适配器、添加适配置)
public class MainActivity extends AppCompatActivity {
private ListView listView;
private ArrayAdapter<String> arrayAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
//1、绑定listview
listView = findViewById(R.id.list);
//2、准备数据源data
String data[] = {
"1","2","3","4","5","6","7","8"};
//3、准备arrayAdapter,关联activity,加载布局文件,关系数据data
arrayAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,data);
//4、listview添加适配器
listView.setAdapter(arrayAdapter);
//5、自由处理
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
String result = adapterView.getItemAtPosition(i).toString();//获取选择项的值
Toast.makeText(MainActivity.this,"您点击了"+result,Toast.LENGTH_SHORT).show();
}
});
}
}