Android Studio BaseAdapter适配器之数据传递与显示

Adapter适配器概念

Adapter 是一种 Android 开发中常用的设计模式,主要用于将后端数据连接到前端显示,是数据和视图(UI)之间一个重要的桥梁。

Android Studio 之BaseAdapter适配器使用

Adapter 主要完成两个任务:一是提供数据源,为 UI 组件(如 ListView)提供展示所需的数据,这些数据通常来自于数据源(可以是数据库、网络等);二是将数据源对应的数据展示在 UI 组件中,即为每个数据项创建对应的 UI 视图。(如图所示:可以直观的看到Data、Adapter、View三者的关系)

应用案例:如图所示 (共需要三个类对象waitFragment类和waitAdapter类,还有waitBean类)
在这里插入图片描述
下面展示waitFragment类

public class waitFragment extends Fragment{
    //定义数据库对象
    private SQLiteDatabase sqLiteDatabase;
    private ImageView add_wait;
    //LiveView
    private ListView M_listViewID2;
    //定义javaBean对象
    private List<waitBean> wait_data=new ArrayList<>();
    private Myadapter2 myadapter2;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view= inflater.inflate(R.layout.fragment_wait, container, false);
        //初始化
        initView(view);
        initData();
        getData();
        //列表的初始化
        M_listViewID2=view.findViewById(R.id.listview);
        myadapter2 = new Myadapter2(wait_data, getContext());
        //加载适配
        M_listViewID2.setAdapter(myadapter2);
        return view;
    }

    void initView(View view){
    }
    public void initData(){
        //插入数据时注意,一定要传入最新的数据库版本号
        MysqlOpenHelper  mysqlOpenHelper=new MysqlOpenHelper(getActivity());
        sqLiteDatabase=mysqlOpenHelper.getWritableDatabase();
    }
    //查找数据库内容
   public void getData() {
       String[] ziduan = {"neirong", "create_time", "type", "id"};
       Cursor cursor = sqLiteDatabase.query("wait_table", ziduan, null, null
               , null, null, null);
               //判断是否有数据
       if (cursor.getCount() > 0) {
           int value1 = cursor.getColumnIndex("neirong");
           int value2 = cursor.getColumnIndex("create_time");
           int value3 = cursor.getColumnIndex("type");
           int value4 = cursor.getColumnIndex("id");
           //遍历保存到变量wait_data
           while (cursor.moveToNext()) {
               String nr = cursor.getString(value1);
               String time = cursor.getString(value2);
               int type = cursor.getInt(value3);
               String id = cursor.getString(value4);
               //日期转型
               SimpleDateFormat dateFormat = new SimpleDateFormat("MM月dd日 HH:mm");
               String format = dateFormat.format(new Date(time));
                 
                   waitBean.setId(id);
                   waitBean.setCreate_time(format);
                   waitBean.setType(String.valueOf(type));
                   waitBean.setNeirong(nr);
                   wait_data.add(waitBean);
   
           }
       } else {
           Toast.makeText(getActivity(), "wait获取信息失败", Toast.LENGTH_SHORT).show();
       }
       cursor.close();
   }
}

下面展示 waitAdapter

public class Myadapter2 extends BaseAdapter  {
    private List<waitBean> data;
    private Context context;
    public Myadapter2(List<waitBean> data, Context context) {
        this.data = data;
        this.context = context;
    }
    public Myadapter2() {
    }
    //用于数据刷新
    public void setData(List<waitBean> data) {
        this.data = data;
        notifyDataSetChanged();
    }
    @Override
    public int getCount() {
    //返回数据数量
        return data.size();
    }
    @Override
    public Object getItem(int i) {
    //返回数据项
        return data.get(i);
    }
    @Override
    public long getItemId(int position) {
    //返回数据项的位置
        return position;
    }
    //getView() 方法负责根据数据源中的数据创建 UI 视图并绑定数据,然后将 UI 视图返回给 UI 组件进行显示
    @Override
    public View getView(int position, View view, ViewGroup viewGroup) {
        //ViewHolder能实现列表数据与视图的关联和复用,通过setTag(viewHOlder)来绑定列表动态位置。
        ViewHolder viewHolder;
        if(view==null){
        //获取Layout目录下的文件R.layout.simple_item2的视图
            view= LayoutInflater.from(context).inflate(R.layout.simple_item2, viewGroup, false);
            //绑定item下的控件id
            viewHolder = new ViewHolder();
            viewHolder.datewait= view.findViewById(R.id.datewait);
            viewHolder.waitTitle= view.findViewById(R.id.waitTitle);
            viewHolder.type= view.findViewById(R.id.datetype1);
            viewHolder.chekbox = view.findViewById(R.id.edit_type);
            view.setTag(viewHolder);
        }
        else {
            viewHolder =(ViewHolder) view.getTag();
        }
            viewHolder.waitTitle.setText(data.get(position).getNeirong());
            viewHolder.datewait.setText(data.get(position).getCreate_time());
            viewHolder.type.setText("完成");
        return view;
    }
    //ListView需要使用的子控件
    private final  class ViewHolder{
        TextView datewait;
        TextView waitTitle;
        TextView type;
        CheckBox chekbox;
    }
}

下面展示 waitBean

public class waitBean  {
private String id,neirong,create_time,update_time,type;
    public waitBean(String id, String neirong, String create_time, String update_time, String type) {
        this.id = id;
        this.neirong = neirong;
        this.create_time = create_time;
        this.update_time = update_time;
        this.type = type;
    }
    public waitBean() {

    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getNeirong() {
        return neirong;
    }
    public void setNeirong(String neirong) {
        this.neirong = neirong;
    }
    public String getCreate_time() {
        return create_time;
    }
    public void setCreate_time(String create_time) {
        this.create_time = create_time;
    }
    public String getUpdate_time() {
        return update_time;
    }
    public void setUpdate_time(String update_time) {
        this.update_time = update_time;
    }
    public String getType() {
        return type;
    }
    public void setType(String type) {
        this.type = type;
    }
    @Override
    public String toString() {
        return "waitBean{" +
                "id='" + id + '\'' +
                ", neirong='" + neirong + '\'' +
                ", create_time='" + create_time + '\'' +
                ", update_time='" + update_time + '\'' +
                ", type='" + type + '\'' +
                '}';
    }
}

重要的代码BaseAdapter代码片

         //获取listView控件ID
        M_listViewID2=view.findViewById(R.id.listview);
        //通过Myadapter构造方法传输数据
        myadapter2 = new Myadapter2(wait_data, getContext());
        //加载数据匹配
        M_listViewID2.setAdapter(myadapter2);

以上就是通过调取数据库获取数据,并把数据通过BaseAdapter进行和ListView视图连接。

总结

通过本课程的学习,我了解如何处理布局、图像、字符串和其他资源文件,并在项目中正确地使用它们 ,了解了BaseAdapter基础知识,在实践编码时,实现了动态展示数据功能,进一步提高了我的编码实践经验。当然,编写代码并不是一路畅通,也遇到许多一些理解不到位的问题,例如:listViwe出现了重复复用的问题,导致了每个item的位置不唯一了,经过网上学习之后。我才只知道ViewHolper的重要性,它可以通过view.setTag() 方法来绑定,保持位置唯一性。所以我希望每位同学也能保持持续学习的态度,加强对知识巩固,才能更清晰的理解概念和理论。

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值