Android群英传读书笔记第四章 (ListView使用技巧)
来源:互联网 发布:软件项目管理 pdf下载 编辑:程序博客网 时间:2024/04/30 03:19
概述
这是读书笔记的第二篇,主要的内容就是关于ListView展开的,ListView是我们开发中用的比较多的一个控件,所以很有必要好好研究一下。
笔记
给ListView设置空视图
当ListView中没有数据时,我们可以显示一个空的视图
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.androidheros.MainActivity"> <ListView android:id="@+id/listview" android:layout_width="match_parent" android:layout_height="match_parent" /> <ImageView android:id="@+id/empty_view" android:layout_width="match_parent" android:layout_height="match_parent" android:src="@mipmap/ic_launcher" /></FrameLayout>
listView = (ListView) findViewById(R.id.listview); listView.setEmptyView(findViewById(R.id.empty_view));
List状态监听
listView.setOnScrollListener(new AbsListView.OnScrollListener() { private int lastVisiblePosition = listView.getLastVisiblePosition(); @Override public void onScrollStateChanged(AbsListView view, int scrollState) { switch (scrollState){ case SCROLL_STATE_IDLE://停止滑动 break; case SCROLL_STATE_TOUCH_SCROLL://正在滑动 break; case SCROLL_STATE_FLING://抛出 break; } } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { //出现最后一个条目 if(firstVisibleItem+visibleItemCount==totalItemCount&&totalItemCount>0){ } //到第一个条目 if(firstVisibleItem == 0){ } if(firstVisibleItem> lastVisiblePosition){ System.out.println("==========下滑"); }else if(firstVisibleItem< lastVisiblePosition){ System.out.println("==========上滑"); } lastVisiblePosition = firstVisibleItem; } }); }}
让ListView弹性滑动
默认情况下,ListView滑动到最顶部值不能继续向下滑的,我们可以重写一个方法来实现弹性滑动。
@Override protected boolean overScrollBy(int deltaX, int deltaY, int scrollX, int scrollY, int scrollRangeX, int scrollRangeY, int maxOverScrollX, int maxOverScrollY, boolean isTouchEvent) { return super.overScrollBy(deltaX, deltaY, scrollX, scrollY, scrollRangeX, scrollRangeY, maxOverScrollX, 100, isTouchEvent); }
这里我们指定maxOverScrollY为100。具体应用时我们可以根据屏幕的密度计算滑动的距离。
自动显示与隐藏布局的ListView
注意:
添加headerview要在设置adapter之前
获取被认为是滑动的最小距离
scaledTouchSlop = ViewConfiguration.get(this).getScaledTouchSlop();
onTouch事件中一般返回false,因为我们要让onTouchEvent处理事件
如何获取ActionBar的高度
/** * 设置头布局,注意:这个头布局的高度要和ToolBar的高度一致 */ public void initHeadView(){ View view = new View(this); AbsListView.LayoutParams params = new AbsListView.LayoutParams (AbsListView.LayoutParams.MATCH_PARENT, (int)getResources().getDimension(R.dimen.abc_action_bar_default_height_material)); view.setLayoutParams(params); listView.addHeaderView(view); }
不同布局的ListView
重写两个方法
/** * 返回position个item的类型 * @param position * @return */ @Override public int getItemViewType(int position) { return super.getItemViewType(position); } /** * 总共有多少中类型 * @return */ @Override public int getViewTypeCount() { return super.getViewTypeCount(); }
最后我们在getView方法中去判断,做不同的处理,比如填充不同的布局
public View getView(int position, View convertView, ViewGroup parent) { if(getItemViewType(position)==0){ }else{ } ...... }
动态改变ListView布局
public class MainActivity extends AppCompatActivity { private ListView listView; String[] datas = {"A","B","C","D","E","F","G","H","I","J", "K","L","M","N","O"}; private List<String> mDatas; private MyAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listView = (ListView) findViewById(R.id.listview); mDatas = Arrays.asList(datas); adapter = new MyAdapter(mDatas, this); listView.setAdapter(adapter); listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { adapter.setCurrentItem(position); adapter.notifyDataSetChanged(); } }); } class MyAdapter extends BaseAdapter{ private List<String> datas; private Context mContext; private int mCurrentPosition; public MyAdapter(List<String> datas,Context context){ this.datas = datas; mContext = context; } @Override public int getCount() { return datas.size(); } @Override public Object getItem(int position) { return datas.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { LinearLayout layout = new LinearLayout(mContext); layout.setOrientation(LinearLayout.VERTICAL); if(mCurrentPosition == position){ layout.addView(addFocusView(position)); }else{ layout.addView(addNormalView(position)); } return layout; } public void setCurrentItem(int position){ mCurrentPosition = position; } } public View addNormalView(int position){ LinearLayout layout = new LinearLayout(this); layout.setGravity(Gravity.CENTER_VERTICAL); layout.setOrientation(LinearLayout.HORIZONTAL); ImageView imageView = new ImageView(this); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams (LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); imageView.setImageResource(R.mipmap.ic_launcher); layout.addView(imageView,params); TextView textView = new TextView(this); textView.setText(mDatas.get(position)); LinearLayout.LayoutParams params2 = new LinearLayout.LayoutParams (LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); layout.addView(textView,params2); return layout; } public View addFocusView(int position){ ImageView imageView = new ImageView(this); imageView.setImageResource(R.mipmap.ic_launcher); return imageView; }}
0 0
- Android群英传读书笔记第四章 (ListView使用技巧)
- android 群英传读书笔记---listview使用技巧(一)
- android群英传读书笔记---ListView使用技巧(二)
- 《Android群英传》读书笔记4.ListView使用技巧
- Android群英传笔记——第四章:ListView使用技巧
- Android群英传第四章笔记·ListView使用技巧
- android群英传笔记--第四章--ListView使用技巧(一)
- android群英传笔记--第四章--ListView使用技巧(二)
- Android群英传笔记——第四章:ListView使用技巧
- 第四章ListView使用技巧(Android群英传)
- Android群英传学习——第四章、ListView使用技巧
- 《Android群英传》读书笔记(2)第四章:ListView常用优化技巧
- 《Android群英传》读书笔记(3)第四章:ListView常用拓展
- 《Android群英传》阅读笔记——第四章:ListView使用技巧
- Android群英传之ListView的使用技巧
- 安卓群英传读书笔记之ListView使用技巧
- Android群英传知识点回顾——第四章:ListView常用优化技巧
- Android群英传——第四章ListView常用优化
- 带你玩转Visual Studio——单元测试
- ACM3-1022
- 2016年欧冠决赛看球小记
- WEB开发的套路——记录的更新
- 开发MapReduce程序 实验1
- Android群英传读书笔记第四章 (ListView使用技巧)
- UIImageView的使用
- 将DataSource分离并构建更轻量的UIViewController
- Netty系列之Netty高性能之道
- R语言主成分和因子分析篇
- 电线最大能够带多大功率及计算方法
- 光流法
- Python安装pybrain
- 数据结构笔记整理第6章:图