Android:三种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();
            }
        });
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_49101726/article/details/114242450