Android——getView(int position,View convertView,ViewGroup parent)参数理解

本文深入解析自定义适配器中getView方法的三个关键参数:position用于确定屏幕上的项目位置;convertView缓存已加载视图提高效率;parent存放加载出的项目视图。适合于Android开发人员学习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在定义自己的适配器时,要重写getView()方法,该方法的原型为:

getView(int position,View convertView,ViewGroup parent)

该方法中的三个参数分别是什么意思,起到什么作用呢?

int position

  • 翻译为:位置
  • 作用:判断当前显示的项目在屏幕上的位置,然后通过position在定义的集合中取值显示在屏幕上

View convertView

  • 翻译为:转换 视图
  • 作用:缓存被滚动到界面之外的项目,提高效率(当需要浏览之前已经被加载过的内容时候)
  • 理解:假设定义了20个项目在listview中,但屏幕大小固定,不能一次性显示完这20项。假设该屏幕依次最多只能显示10项内容,经过测试,在屏幕上初次加载这前10项内容时,convertView的值为null,当屏幕向上滚动,显示出第11项内容,第1项内容被滚出屏幕外时,convertView的值不再为空。

ViewGroup parent

  • 翻译为:父本
  • 作用:存放被加载出来的每一个项目视图
package com.example.kucun2.function; import static android.content.ContentValues.TAG; import android.content.Context; import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.Spinner; import android.widget.TextView; import androidx.annotation.NonNull; import com.example.kucun2.entity.Bancai; import com.example.kucun2.entity.Caizhi; import com.example.kucun2.entity.Chanpin; import com.example.kucun2.entity.Dingdan; import com.example.kucun2.entity.Mupi; import com.example.kucun2.entity.Zujian; import com.example.kucun2.entity.data.Data; import java.util.List; public class Adapter { // 1. 更新材质适配器(材质显示只输出name) public static ArrayAdapter<Caizhi> setupCaizhiSpinner(Spinner spinnerCaizhi, List<Caizhi> data, Context context) { ArrayAdapter<Caizhi> caizhiAdapter = new ArrayAdapter<Caizhi>( context, android.R.layout.simple_spinner_item, data) { @Override public View getView(int position, View convertView, ViewGroup parent) { View view = super.getView(position, convertView, parent); TextView textView = view.findViewById(android.R.id.text1); Caizhi caizhi = getItem(position); textView.setText(caizhi != null ? caizhi.getName() : "请选择材质"); return view; } @Override public View getDropDownView(int position, View convertView, ViewGroup parent) { View view = super.getView(position, convertView, parent); TextView textView = view.findViewById(android.R.id.text1); Caizhi caizhi = getItem(position); textView.setText(caizhi != null ? caizhi.getName() : ""); return textView; } }; caizhiAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinnerCaizhi.setAdapter(caizhiAdapter); return caizhiAdapter; } // 2. 更新木皮适配器(木皮输出name + 油或不加) public static void setupMupiSpinner(Spinner spinnerMupi, List<Mupi> data,Context context) { ArrayAdapter<Mupi> mupiAdapter = new ArrayAdapter<Mupi>( context, android.R.layout.simple_spinner_item, data) { @Override public View getView(int position, View convertView, ViewGroup parent) { View view = super.getView(position, convertView, parent); TextView textView = view.findViewById(android.R.id.text1); Mupi mupi = getItem(position); textView.setText(mupi != null ? mupi.formatMupiDisplay() : "请选择木皮"); return textView; } @Override public View getDropDownView(int position, View convertView, ViewGroup parent) { View view = super.getView(position, convertView, parent); TextView textView = view.findViewById(android.R.id.text1); Mupi mupi = getItem(position); textView.setText(mupi != null ? mupi.formatMupiDisplay() : ""); return textView; } }; mupiAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinnerMupi.setAdapter(mupiAdapter); } // 2. 更新木皮适配器(板材输出TableText) public static void setupBancaiSpinners(Spinner spinnerBancai, List<Bancai> data, Context context) { ArrayAdapter<Bancai> mupiAdapter = new ArrayAdapter<Bancai>( context, android.R.layout.simple_spinner_item, data) { @Override public View getView(int position, View convertView, ViewGroup parent) { View view = super.getView(position, convertView, parent); TextView textView = view.findViewById(android.R.id.text1); Bancai bancai = getItem(position); textView.setText(bancai != null ? bancai.TableText() : "请选择板材"); return textView; } @Override public View getDropDownView(int position, View convertView, ViewGroup parent) { View view = super.getView(position, convertView, parent); TextView textView = view.findViewById(android.R.id.text1); Bancai bancai = getItem(position); textView.setText(bancai != null ? bancai.TableText() : ""); return textView; } }; mupiAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinnerBancai.setAdapter(mupiAdapter); } public static void setupDingdanSpinner(Spinner spinnerDingdan, List<Dingdan> data, Context context) { // 定制订单适配器显示订单号(number) ArrayAdapter<Dingdan> dingdanAdapter = new ArrayAdapter<Dingdan>( context, android.R.layout.simple_spinner_item, data) { @NonNull @Override public View getView(int position, View convertView, @NonNull ViewGroup parent) { View view = super.getView(position, convertView, parent); TextView textView = view.findViewById(android.R.id.text1); Dingdan dingdan = getItem(position); textView.setText(dingdan != null ? dingdan.getNumber() : "请选择"); return textView; } @Override public View getDropDownView(int position, View convertView, @NonNull ViewGroup parent) { View view = super.getView(position, convertView, parent); TextView textView = view.findViewById(android.R.id.text1); Dingdan dingdan = getItem(position); textView.setText(dingdan != null ? dingdan.getNumber() : "请选择"); return textView; } }; dingdanAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinnerDingdan.setAdapter(dingdanAdapter); } public static void setupChanpinSpinner(Spinner spinnerChanpin, List<Chanpin> data, Context context) { // 定制订单适配器显示订单号(number) ArrayAdapter<Chanpin> ChanpinAdapter = new ArrayAdapter<Chanpin>( context, android.R.layout.simple_spinner_item, data) { @NonNull @Override public View getView(int position, View convertView, @NonNull ViewGroup parent) { View view = super.getView(position, convertView, parent); TextView textView = view.findViewById(android.R.id.text1); Chanpin chanpin = getItem(position); textView.setText(chanpin != null ? chanpin.getBianhao() : "请选择"); return textView; } @Override public View getDropDownView(int position, View convertView, @NonNull ViewGroup parent) { View view = super.getView(position, convertView, parent); TextView textView = view.findViewById(android.R.id.text1); Chanpin chanpin = getItem(position); textView.setText(chanpin != null ? chanpin.getBianhao() : "请选择"); return textView; } }; ChanpinAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinnerChanpin.setAdapter(ChanpinAdapter); } // 定制组件适配器显示组件名(name) public static void setupZujianSpinner(Spinner spinnerZujian, List<Zujian> data, Context context) { ArrayAdapter<Zujian> zujianAdapter = new ArrayAdapter<Zujian>( context, android.R.layout.simple_spinner_item, data) { @NonNull @Override public View getView(int position, View convertView, @NonNull ViewGroup parent) { View view = super.getView(position, convertView, parent); TextView textView = view.findViewById(android.R.id.text1); Zujian zujian = getItem(position); textView.setText(zujian != null ? zujian.getName() : "请选择"); return textView; } @Override public View getDropDownView(int position, View convertView, @NonNull ViewGroup parent) { View view = super.getView(position, convertView, parent); TextView textView = view.findViewById(android.R.id.text1); Zujian zujian = getItem(position); textView.setText(zujian != null ? zujian.getName() : "请选择"); return textView; } }; zujianAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinnerZujian.setAdapter(zujianAdapter); } } mple.kucun2 E FATAL EXCEPTION: main Process: com.example.kucun2, PID: 12408 java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:454) at android.widget.ArrayAdapter.getView(ArrayAdapter.java:416) at com.example.kucun2.function.Adapter$5.getView(Adapter.java:166) at android.widget.AbsSpinner.onMeasure(AbsSpinner.java:206) at android.widget.Spinner.onMeasure(Spinner.java:622) at androidx.appcompat.widget.AppCompatSpinner.onMeasure(AppCompatSpinner.java:444) at android.view.View.measure(View.java:29007) at android.widget.LinearLayout.measureHorizontal(LinearLayout.java:1226) at android.widget.LinearLayout.onMeasure(LinearLayout.java:728) at android.view.View.measure(View.java:29007) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7132) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java
06-13
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值