Android列表组件ListView使用详解之ViewHolder提高效率
Android列表组件ListView,用于显示列表式的数据信息。自Android5.X版本起,官方推出了RecyclerView组件,在许多方面逐渐取代ListView,但ListView仍然得到了广泛的应用,后续的文章中会接着探讨RecyclerView。
使用ViewHolder模式旨在提高ListView加载数据的效率,充分利用ListView视图的缓存机制,避免在ListView适配器的getView()方法中每次都通过findViewById()方法来实例化组件。
效果图:
显示界面:
package net.oschina.git.zhaikun.androiddeveloped.activitys;import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v7.app.AppCompatActivity;import android.widget.ListView;import net.oschina.git.zhaikun.androiddev ...
Android列表组件ListView使用详解之设置分割线
在上一篇文章Android列表组件ListView使用详解之ViewHolder提高效率中,我们看到每个子项之间是有一条分割线的,这是ListView默认显示的属性,我们可以更改这个属性,达到需要显示的分割线效果。
ListView组件属性:
android:divider=""
控制分割线显示的颜色,可以是颜色值,也可以是一张图片资源。
android:dividerHeight=""
控制分割线显示的高度。
分割线的宽度等同于ListView组件的宽度。
在ListView组件中添加以上两个属性,达到所需显示的分割线效果:
<ListView android:id="@+id/test_lv" android:layout_width="match_parent" android:layout_height="match_parent" android:div ...
Android列表组件ListView使用详解之隐藏滚动条
默认情况下的ListView在发生滚动时,组件的右侧会出现滚动条,通过将ListView的属性设置为以下值时,隐藏滚动条
android:scrollbars="none"
Android列表组件ListView使用详解之取消子项的点击效果
在ListView中,默认带有子项的点击效果,在5.X以后系统版本中带有水纹效果,5.X之前带有改变子项背景颜色的效果,使用以下属性可对子项的点击效果进行修改。
android:listSelector=""
1、将该属性值设为透明,以达到隐藏子项的点击效果。
android:listSelector="@android:color/transparent"
2、将该属性的值设置为具体的颜色值,可对子项的点击效果进行修改,以下属性值将子项的点击效果变成红色。
android:listSelector="#ff0000"
Android列表组件ListView使用详解之设置显示第几项子项
在ListView的整个列表中,设置当前组件显示的第几项,或者理解成定位到列表中具体的某一项时,使用ListView类中的方法:
@Override public void setSelection(int position) { setSelectionFromTop(position, 0); }
参数position即指定显示列表中具体的某一项子项,position的取值为大于等于0,如需要指定显示列表中的第N项时,position = N - 1;在下面的例子中,默认显示了列表中的第5项,关键代码为:
testLv.setSelection(4);
效果图:
此时,在界面的顶端(ListView组件的顶部)直接显示第5项子项。
当前显示界面代码:
package net.oschina.git.zhaikun.androiddeveloped.activitys;import android.os.Bundle;import android.support.annotation.Nullable;import android. ...
Android列表组件ListView使用详解之动态加载或修改列表数据
在使用ListView组件来显示列表数据时,有的时候我们需要改变列表中的数据,有以下方法:
1、重新给ListView组件设置适配器
这种方法重新创建了ListView,效率不好。
2、使用适配器中的方法
/** * Notifies the attached observers that the underlying data has been changed * and any View reflecting the data set should refresh itself. */ public void notifyDataSetChanged() { mDataSetObservable.notifyChanged(); }
这种方法旨在告知适配器,ListView中的数据源发生变化,需要重新加载新的数据,不会重新创建ListView。使用此方法时,需要确保使用的是同一数据存储对象,只是存储对象中的值发生变化,才能使改动生效。关键代码如下:
listViewDemoAdapter.n ...
Android列表组件ListView使用详解之数据为空提示信息
在使用ListView显示数据时,有时候可能显示的数据为空,此时界面可能需要给出友好的提示,使用ListView类的方法:
/** * Sets the view to show if the adapter is empty */ @android.view.RemotableViewMethod public void setEmptyView(View emptyView) { mEmptyView = emptyView; // If not explicitly specified this view is important for accessibility. if (emptyView != null && emptyView.getImportantForAccessibility() == IMPORTANT_FOR_ACCESSIBILITY_AUTO) ...
Android列表组件ListView使用详解之屏幕触摸事件
给ListView组件添加触摸事件监听,常用的有ACTION_DOWN、ACTION_MOVE和ACTION_UP事件:
@Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN://触摸屏幕时,只执行一次 Log.i(TAG, "执行触摸时的操作"); break; case MotionEvent.ACTION_MOVE://触摸到屏幕时,反复执行 Log.i(TAG, "执行移动时的操作"); break; case MotionEvent.ACTION_UP://离开屏幕时,只执 ...
Android列表组件ListView使用详解之滑动事件监听
给ListView增加滑动监听事件,便于在每一个事件触发点增加我们的处理逻辑,如ListView中的子项上滑动、下滑动、滑动到底部等。
设置ListView的滑动监听事件:
testLv.setOnScrollListener(this);
当前类实现了AbslistView.OnScrollListener。
需要在当前类中重写以下两个方法:
@Override public void onScrollStateChanged(AbsListView view, int scrollState) { switch (scrollState) { case SCROLL_STATE_IDLE://停止滑动 Log.w(TAG, "停止滑动"); break; case SCROLL_STATE_TOUCH_SCROLL://正在滑动 Log.w(TAG, ...
Android列表组件ListView子项的点击事件与子项中组件的点击事件
点击ListView子项时进行相关的逻辑操作,为ListView组件添加子项点击事件:
//设置ListView子项的点击事件 testLv.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Toast.makeText(ListViewDemoActivity.this, "点击的子项ID = " + position, Toast.LENGTH_SHORT).show(); } });
ListView子项中组件的点击事件,在适配器中添加,这样不会与ListView子项的点击事件产生冲突问题:
...