当前位置: 首页 > news >正文

莞城东莞网站建设百度知道官网手机版

莞城东莞网站建设,百度知道官网手机版,wordpress第三方用户系统,网站建设链接认识适配器 在学完并且在做了一个自主项目后,我对适配器有了以下认识:1. 适配器的作用: 数据驱动的动态页面列表渲染,所以适配器主要就做了两件事:遍历数据,渲染页面(列表项)。比…

认识适配器

在学完并且在做了一个自主项目后,我对适配器有了以下认识:
1. 适配器的作用:
    数据驱动的动态页面列表渲染,所以适配器主要就做了两件事:遍历数据,渲染页面(列表项)。比如我们常见的订单列表,每一项订单项样式是相同的,而订单数据不同。
2. 适配器的参数:
    大部分都是需要我们继承自定义去实现适配器,除非你仅仅用于展示数据不用做任何复杂数据样式和数据交互的列表项。既然是自定义适配器,那么实例化参数就是我们自己定义了,那么适配器参数需要什么呢?
    其一,你在哪个页面使用适配器(这个其实就叫context);
    其二,你要遍历渲染的数据,列表项数据(一般都是List<Object>类型)
    其三:渲染的列表项布局,在android studio中布局页面都是全局的可引用的(R.layout.my_list_item),所以可以不用作为实例化适配器参数。
    其他:其他呢就没了,准确来说是必要的没了,那么其他参数无非是结合具体业务逻辑来决定。
3. 如何使用适配器
    其一:适配器的使用对象,即我的哪个页面的哪个地方(列表组件)需要使用适配器。
    其二:创建适配器对象,适配器需要哪些参数。
    其三:设置适配器,为使用对象设置适配器。
4. 刷新页面列表项
    数据常指变量,也就是说数据是变化的,那么我们就有需求:更改数据后,及时地自动进行页面数据刷新。
    页面为什么要刷新,因为数据变了,所以拿到最新数据,再重新创建或更新适配器对象,然后重设置适配器就好了。

BaseAdapter

结构

public abstract class BaseAdapter

extends Object implements ListAdapter SpinnerAdapter

        

java.lang.Object

android.widget.BaseAdapter

直接子类

         ArrayAdapter<T>, CursorAdapter, SimpleAdapter

间接子类

        ResourceCursorAdapter, SimpleCursorAdapter

简要

描述

    一个抽象类,是各种适配器的基础,它为简单的列表提供了基本的实现,但也可以根据需要进行定制。
可作用于的页面控件
    ListView:用于显示垂直滚动的单列数据列表。
    GridView:用于显示网格布局的数据列表,支持水平和垂直滚动。
    Spinner:下拉选择框,可通过BaseAdapter来自定义下拉选项的样式和数据。
    ExpandableListView:可展开的列表视图,用于显示具有层次结构的数据列表。
需要重写的方法

    getCount、getItem、getItemId、getView

重写方法说明

int getCount()
    获取传入数据的长度
Object getItem(int i)
    根据索引获取指定的数据项
long getItemId(int i)
    如果结合数据库的话就是获取对应的记录id了,不结合数据库就是获取数据项的索引
View getView(int i, View view, ViewGroup viewGroup)
    数据索引可以获取当前列表项数据,然后可以开始结合数据构建具体的列表项视图。

代码示例
private class MyAdapter extends BaseAdapter{private Context context;private List<String> goodTitles;private LayoutInflater layoutInflater;public MyAdapter(Context context, List<String> goodTitles){this.context = context;this.goodTitles = goodTitles;this.layoutInflater = LayoutInflater.from(context);}@Overridepublic int getCount() {return goodTitles.length;}@Overridepublic Object getItem(int i) {return goodTitles[i];}@Overridepublic long getItemId(int i) {return i;}@Overridepublic View getView(int i, View view, ViewGroup viewGroup) {View itemView = layoutInflater.inflate(MainActivity.this,R.layout.items,null);goodTitle = itemView.findViewById(R.id.title);goodImg = itemView.findViewById(R.id.img);goodPrice = itemView.findViewById(R.id.price);goodTitle.setText(goodTitles[i]);goodImg.setBackgroundResource(goodImgs[i]);goodPrice.setText(""+goodPrices[i]);return itemView;}
}
优化getView
// 优化getView的原因主要是避免列表项视图的重复构建@Override
public View getView(int i, View view, ViewGroup viewGroup) {MyHolder myHolder = null;if(view == null){view = View.inflate(MainActivity.this,R.layout.items,null);MyHolder = new ViewHolder(view);view.setTag(myHolder);}else{myHolder = (ViewHolder) view.getTag();}myHolder.goodTitle.setText(goodTitles[i]);myHolder.goodImage.setBackgroundResource(goodImgs[i]);myHolder.goodPrice.setText(""+goodPrices[i]);return view;
}class MyHolder{TextView goodTitle;ImageView goodImage;TextView goodPrice;public MyHolder(View view){this.goodTitle = view.findViewById(R.id.title);this.goodImage = view.findViewById(R.id.img);this.goodPrice = view.findViewById(R.id.price);}
}

 SimpleAdapter

简要

继承自BaseAdapter,实现了BaseAdapter的抽象方法,可以实例化直接使用。
public SimpleAdapter(Context context,
                    List<?extends Map<String,?>> data,
                    int resource,
                    String[] from,
                    int[] to
                    )

context:上下文对象,用于访问应用程序资源。
data:数据源,它通常是一个包含 Map 对象的列表,每个 Map 对象表示一条数据。
resource:用于指定列表项的布局资源 ID。
from:用于指定数据中的键名,表示要展示在布局中的数据项。

to:用于指定布局中的视图资源 ID,表示数据应该展示在布局中的哪个视图上。


可作用于的控件ListView、GridView、Spinner

代码示例
// 下面是一个简单示例,它将一组数据适配到ListView中进行展示public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 准备数据源,这里使用 List<Map<String, Object>> 形式List<Map<String, Object>> dataList = new ArrayList<>();Map<String, Object> data1 = new HashMap<>();data1.put("name", "Alice");data1.put("age", 20);Map<String, Object> data2 = new HashMap<>();data2.put("name", "Bob");data2.put("age", 25);dataList.add(data1);dataList.add(data2);// 指定数据对应的 keyString[] from = {"name", "age"};// 指定数据展示的视图资源 IDint[] to = {R.id.text_name, R.id.text_age};// 创建 SimpleAdapterSimpleAdapter simpleAdapter = new SimpleAdapter(this, dataList,R.layout.list_item, from, to);// 获取 ListViewListView listView = findViewById(R.id.list_view);listView.setAdapter(simpleAdapter);}
}

ArrayAdapter

简要

简述:
    继承自BaseAdapter,可以直接实例化使用,该适配器有个重要的特点就是数据源单一,意味着ArrayAdapter只能渲染列表项单一的控件。
    
ArrayAdapter的构造函数通常包含以下参数:
    Context:上下文对象,用于访问应用程序资源。
    int:用于指定列表项的布局资源 ID。
    T[] 或 List<T>:数据源,可以是数组或列表形式的数据集合。

代码示例
List<String> dataList = new ArrayList<>(Arrays.asList("Apple", "Banana", "Cherry"));
ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1,dataList
);
ListView listView = findViewById(R.id.list_view);
listView.setAdapter(adapter);

 CursorAdapter

感觉就是省略了遍历Cursor对象的步骤,没什么大用,还不如用BaseAdapter实现,二者实现代码量差别不大,而且后者更灵活。所以这里就不介绍CursorAdapter了。

RecyclerView.Adapter

简要

    RecyclerView.Adapter 是用于将数据适配到 RecyclerView中进行展示的适配器类。它是 页面控件RecyclerView的一个重要组成部分,用于管理数据与视图之间的绑定,并帮助实现高级的列表和网格布局效果。相比于传统的 ListView,RecyclerView 提供了更高度的灵活性和定制性。
    RecyclerView.Adapter 是一个抽象类,你需要继承它并实现一系列必要的方法来管理数据与视图的绑定过程。

代码示例
// 这个<RecyclerViewAdapter.ViewHolder>指定了以ViewHolder作为泛型类型参数,用于指定ViewHolder的类型
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder> {private List<String> dataList;public RecyclerViewAdapter(List<String> dataList) {this.dataList = dataList;}@NonNull@Overridepublic ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item, parent, false);return new ViewHolder(view);}@Overridepublic void onBindViewHolder(@NonNull ViewHolder holder, int position) {String data = dataList.get(position);holder.textView.setText(data);}@Overridepublic int getItemCount() {return dataList.size();}public static class ViewHolder extends RecyclerView.ViewHolder {TextView textView;public ViewHolder(View itemView) {super(itemView);textView = itemView.findViewById(R.id.text_view);}}
}

http://www.hengruixuexiao.com/news/42099.html

相关文章:

  • iis做网站跳转app开发公司推荐
  • 建设网站所需技术优化大师班级
  • 做网站是怎么赚钱吗360竞价推广开户多少钱
  • 江苏省建设工程招标网站线上线下整合营销方案
  • 做网站前端和平面配合网站排名怎么搜索靠前
  • 祖传做网站如何获取网站的seo
  • 国外最受欢迎的网站网站推广的具体方案
  • 专做美妆的网站国内b站不收费网站有哪些
  • 广告网站模板下载不了百度seo灰色词排名代发
  • 国外做电商平台的网站还有什么seo新闻
  • 网站建设产品话术公司网站模板
  • 网站系统名称西安网站seo价格
  • 网站上传后百度区域代理
  • 备案系统网站俄罗斯搜索引擎yandex推广入口
  • 网站备案号码网络推广哪家好
  • 襄阳seo研究中心长春seo结算
  • 做worksheet的网站自己如何制作一个小程序
  • 企业门户网站的意义代写
  • 网站商城是用什么框架做的百度最贵关键词排名
  • 网站开发文档百度文库网络营销服务公司
  • 珠海蓝迪装饰设计工程有限公司邹平县seo网页优化外包
  • 仿搜狐视频网站源码学软件开发学费多少钱
  • 株洲专业做网站设计的seozhun
  • 深圳网站建设迅美其他搜索引擎
  • 宁波网站建设公司排名河北网站推广
  • 淘宝做详情页代码网站班级优化大师是干什么用的
  • 安阳公司做网站seo优化排名工具
  • 怎么屏蔽ip段访问网站站长工具seo综合查询降级
  • 欧美风网站建设网站制作代码
  • 赣州做网站的公司长沙seo优化报价