上一篇解析了AndroidSwipeLayout的普通用法
这一次我们来看一下它在ListView中的使用,同样我们分析官方的sample来学习如何使用
在上一篇忘了给出它的gradle配置
<code>
compile "com.daimajia.swipelayout:library:1.2.0@aar"
compile 'com.nineoldandroids:library:2.4.0'
compile 'jp.wasabeef:recyclerview-animators:1.0.3@aar'
</code>
同样看分析布局文件
listview.xml
listview_item.xml
结果这两个布局都非常简单,所以我们就不分析了
那我们就进入代码分析环节
ListViewExample.java
<code>mListView = (ListView) findViewById(R.id.listview);
mAdapter = new ListViewAdapter(this);</code>
这两句进行初始化,ListView,ListViewAdapter(ListViewAdapter我们下面详细解析)
<code>mAdapter.setMode(Attributes.Mode.Single);</code>
这句代码是设置Adapter的模式,Attributes.Mode.Single代表只有一个拖拽打开的时候,其他的关闭,在例子apk中可以体验出
<code>
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override public void onItemClick(AdapterView<?> parent,
View view,
int position,
long id) {
((SwipeLayout)(mListView
.getChildAt(position-mListView
.getFirstVisiblePosition())))
.open(true);}});
</code>
设置listview的itemclick监听,当点击的时候,打开swipeLaout
<code>
mListView.setOnTouchListener(
new View.OnTouchListener() {
@Override public boolean onTouch(View v, MotionEvent event{
Log.e("ListView", "OnTouch");
System.out.println("OnTouch");
return false;
}});</code>
设置listview的touch监听
<code>
mListView.setOnItemLongClickListener(
new AdapterView.OnItemLongClickListener() {
@Override public boolean onItemLongClick(
AdapterView<?> parent,
View view,
int position,
long id) {
System.out.println("OnItemLongClickListener");
return true; }});
</code>
设置ListView的OnItemLongClick的监听
<code>
mListView.setOnScrollListener(
new AbsListView.OnScrollListener() {
@Override public void onScrollStateChanged(
AbsListView view,
int scrollState) {
Log.e("ListView", "onScrollStateChanged");
System.out.println("onScrollStateChanged"); }
@Override public void onScroll(AbsListView view,
int firstVisibleItem,
int visibleItemCount,
int totalItemCount) {
System.out.println("onScroll"); }});
</code>
设置ListView的OnItemSelected监听
<code>
mListView.setOnItemSelectedListener(
new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
Log.e("ListView", "onItemSelected:" + position);
System.out.println("onItemSelected " + position); }
@Override
public void onNothingSelected(AdapterView<?> parent) {
Log.e("ListView", "onNothingSelected:");
System.out.println("onNothingSelected: "); }});
</code>
然后分析ListViewAdapter
~~发现ListViewAdapter继承自BaseSwipeAdapter,
BaseSwipeAdapter继承自BaseAdapter
<code> BaseSwipeAdapter是一个抽象类,子类需要实现
getSwipeLayoutResourceId,generateView,fillValues,getCount, getItem,getItemId函数</code>
*getCount,getItem,getItemId函数实现和BaseAdapter中一样
*getSwipeLayoutResourced需要返回一个Swipelayout的id,便于对其的处理
generateView函数用于生成一个View,和BaseAdapter的getView的用法基本一样,不同的是在这里可以不处理view的复用,因为BaseSwipeAdapter中已经封装了view的复用处理
*fillValues在这个函数中填充数据
下面看例子中的ListViewAdapter的实现
<code>
@Override
public int getSwipeLayoutResourceId(int position) { return R.id.swipe;}
返回的是ListView_item.xml中的swipelayout的id
</code>
个人感觉简书的markdown太难用了,贴代码不方便直接上图了
Paste_Image.png Paste_Image.pngok,listView使用AndroidSwipeLayout结束,下次分析RecyclerViewr使用它
网友评论
'''
code
'''
下次试试~~'code'这样是不跨行的短代码用的~