1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > android listview高级 Android 高级控件笔记-列表视图ListView 基本适配器BaseAdapter

android listview高级 Android 高级控件笔记-列表视图ListView 基本适配器BaseAdapter

时间:2022-05-04 09:22:11

相关推荐

android listview高级 Android 高级控件笔记-列表视图ListView 基本适配器BaseAdapter

我最近做项目用到了基本适配器BaseAdapter,所以写篇博客总结一下,希望也能对你有所帮助

什么时候用BaseAdapter(同一项存在多个控件,复杂的列表时)

Android中Adapter类其实就是把数据源绑定到指定的View上,然后再返回该View,而返回来的这个View就是ListView中的某一行item。这里返回来的View正是由我们的Adapter中的getView方法返回的。这样就会容易理解数据是怎样一条一条显示在ListView 中的。

简单的ListView可使用ArrayAdapter和SimpleAdapter两种适配器。其中, ArrayAdapter适用于纯文本的列表数据,SimpleAdapter适用于带图标的列表数据。实际应用中常常有更复杂的列表,比如同一项中存在多个控件,这种情况即使用SimpleAdapter也很吃力,而且不易扩展。基于此, Android提供了一种适应性更强的基本适配器BaseAdapter,该适配器允许开发者在别的代码文件中进行逻辑处理,大大提高了代码的可读性和可维护性。

step1:创建列表单行的布局

新建一个layout,和普通的layout文件差不多,只不过这个文件设置的是ListView单项的样式。

例如:item_layout.xml

android:id="@+id/textview_date"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="TextView"android:textAppearance="@style/TextAppearance.AppCompat.Medium"android:visibility="visible" />

android:layout_width="match_parent"android:layout_height="50dp"android:orientation="horizontal">

android:id="@+id/image_time"android:layout_width="wrap_content"android:layout_height="match_parent"android:layout_weight="0.5" />

android:id="@+id/textview_time"android:layout_width="wrap_content"android:layout_height="match_parent"android:layout_weight="1"android:gravity="center"android:textAppearance="@style/TextAppearance.AppCompat.Large" />

step2:实现BaseAdapter的基本方法

写一个新的适配器继承BaseAdapter,从BaseAdapter派生的数据适配器主要实现下面几个方法。

构造函数:指定适配器需要处理的数据集合。

getCount:获取数据项的个数。

getView:获取每项的展示视图,并对每项的内部控件进行业务处理。

getItem:数据集中指定索引对应的数据项。

例如:

public class MyListAdapter extendsBaseAdapter {

Context context;

List data; //数据源int layout; //Item布局

public MyListAdapter(Context context, int layout ,Listdata){this.context=context;this.layout=layout;this.data=data;

}/*** 这里的getCount方法是程序在加载显示到ui上时就要先读取的

* 这里获得的值决定了listview显示多少行

* 实际应用中此处的返回值是由从数据库中查询出来的数据的总条数*/@Overridepublic intgetCount() {return data == null ? 0: data.size();

}/*** 根据ListView所在位置返回View

*@paramposition

*@return选中的数据*/@Overridepublic Object getItem(intposition) {

Nbp_data Nbp_choosen_data=data.get(position);//return Nbp_choosen_data == null ? null : data.get(position);

returnNbp_choosen_data;

}/*** 根据ListView位置得到数据源集合中的Id

*@paramposition

*@return

*/@Overridepublic long getItemId(intposition) {returnposition;

}/*** 重写adapter最重要的就是重写此方法,此方法也是决定listview界面的样式的

*@paramposition

*@paramconvertView

*@paramparent

*@return

*/@Overridepublic View getView(intposition, View convertView, ViewGroup parent) {

ImageView imageView_time;

TextView textView_time;

TextView textView_date;final p_data record_data=data.get(position);if (convertView == null) {

convertView= LayoutInflater.from(context).inflate(layout,null);

}else{

}

imageView_time=(ImageView) convertView.findViewById(R.id.image_time);

textView_time=(TextView) convertView.findViewById(R.id.textview_time);

textView_date=(TextView) convertView.findViewById(R.id.textview_date);

imageView_time.setImageResource(record_data.getTimeImage());

textView_date.setText(record_data.getDATE());

textView_time.setText(record_data.getTIME());

returnconvertView;

}

}

在列表单行控件比较多的时候,ViewHolder方法可大幅度优化ListView的滑动。

step3:在Activity或Fragment中与ListView绑定

例如:

//在fragment的onCreateView()中

MyListAdapter myListAdapter=newMyListAdapter(root.getContext(),R.layout.item_layout,recorded_data);

ListView listView=(ListView)root.findViewById(R.id.lv_recordedData);

listView.setAdapter(myListAdapter);//设置事件监听

listView.setOnItemClickListener(newAdapterView.OnItemClickListener() {

@Overridepublic void onItemClick(AdapterView> arg0, View arg1, int arg2, longarg3) {

p_data choosen_data=(p_data)arg0.getItemAtPosition(arg2);int date =choosen_data.getDATE();int time =choosen_data.getTIME();}

});长按事件监听

// listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener(){//@Override//public boolean onItemLongClick(AdapterView> arg0, View arg1, int arg2, long arg3){//return true;//}//});

参考:

《Android Studio开发实战:从零基础到App上线》欧阳燊清华大学出版社

原文:/XIEjm/p/12813935.html

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。