当点击一个button或者是其它view时对应的item滑到顶部
来源:互联网 发布:mac搜狐视频怎么缓存 编辑:程序博客网 时间:2024/05/17 03:13
需求:当点击一个button或者是其它view时,使得对应的listview的item自动滑动屏幕的顶部、、、、、
思路:利用了ScrollView嵌套ListView,然后ListView嵌套了ListView来实现。
注意:因为分装的方法中用了listview 所以适配器中的视图用了listview嵌套了listview。
主页面的代码:
public class MainActivity extends AppCompatActivity { private ListView myListView; private ScrollView myScrollView; private List<String> data = new ArrayList<>(); private ListAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); myListView = ((ListView) findViewById(R.id.lv)); myScrollView = ((ScrollView) findViewById(R.id.sv)); initData(); } private void initData() { data.add("好好学习,天天向上"); data.add("今天是个号日子"); data.add("尼玛,你说的是真的吗"); adapter = new ListAdapter(this,data); myListView.setAdapter(adapter); } public void onclicl(View view) { switch (view.getId()){ //当点击 a 这个button按钮的时候 case R.id.a: Log.e("flag","aaaaaaaaaaaaaaaa"); myScrollView.smoothScrollTo(0,adapter.getViewLocation(myScrollView,0)); break; //当点击 b 这个button按钮的时候 case R.id.b: Log.e("flag","bbbbbbbbbbbbbbbb"); myScrollView.smoothScrollTo(0,adapter.getViewLocation(myScrollView,1)); break; //当点击 c 这个button按钮的时候 case R.id.c: Log.e("flag","ccccccccccccc"); myScrollView.smoothScrollTo(0,adapter.getViewLocation(myScrollView,2)); break; } }}
适配器中的代码:
public class ListAdapter extends BaseAdapter { private Context context; private List<String> data = new ArrayList<>(); private HashMap<Integer,Integer> mapHeights = new HashMap<>(); public ListAdapter(Context context, List<String> data) { this.context = context; this.data = data; } @Override public int getCount() { return 3; } @Override public Object getItem(int position) { return data.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { final ViewHolder holder; if (convertView == null){ convertView = LayoutInflater.from(context).inflate(R.layout.item_baike, parent, false); holder = new ViewHolder(); holder.myListView = (ListView) convertView.findViewById(R.id.myListView); convertView.setTag(holder); }else { holder = ((ViewHolder) convertView.getTag()); } //利用了listview嵌套listview 外边大的ListView的position if (position==0){ OneAdapter oneAdapter = new OneAdapter(context,data); holder.myListView.setAdapter(oneAdapter); //当position是0的时候,计算他的高度 mapHeights.put(position,setListViewHeightBasedOnChildren(holder.myListView)); }else if (position==1){ OneAdapter oneAdapter = new OneAdapter(context,data); holder.myListView.setAdapter(oneAdapter); mapHeights.put(position,setListViewHeightBasedOnChildren(holder.myListView)); }else { OneAdapter oneAdapter = new OneAdapter(context,data); holder.myListView.setAdapter(oneAdapter); mapHeights.put(position,setListViewHeightBasedOnChildren(holder.myListView)); } return convertView; } private static class ViewHolder { ListView myListView; } public int getViewLocation(ScrollView scrollView, int pos){ int height = 0; // 遍历全部高度,到达对应的索引 for (int i = 0; i < pos; i++){ Integer integer = mapHeights.get(i); if (integer != null){ height += integer; } } return getLinearViewY(scrollView) + height; } private int getLinearViewY(ScrollView scrollView){ if (scrollView == null){ return 0; } // LinearLayout rView = (LinearLayout) scrollView.getChildAt(0); for (int i = 0, size = rView.getChildCount(); i < size; i++){ View view = rView.getChildAt(i); if (view instanceof YListView){ // return view.getScrollY(); return (int) view.getY(); } } return 0; } public static int setListViewHeightBasedOnChildren(ListView listView) { //获取listview对应的adapter android.widget.ListAdapter listAdapter = listView.getAdapter(); //item的高度 if (listAdapter == null) { return 0; } int totalHeight = 0; for (int i = 0, len = listAdapter.getCount(); i < len; i++) { // listAdapter.getCount()返回数据项的数目 View listItem = listAdapter.getView(i, null, listView); // 计算子项View 的宽高 listItem.measure(0, 0); // 统计所有子项的总高度 totalHeight += listItem.getMeasuredHeight(); } ViewGroup.LayoutParams params = listView.getLayoutParams(); params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1)); // listView.getDividerHeight()获取子项间分隔符占用的高度 // params.height最后得到整个ListView完整显示需要的高度 listView.setLayoutParams(params); // 返回总体高度 return params.height; }}
阅读全文
1 0
- 当点击一个button或者是其它view时对应的item滑到顶部
- GridView的Item中含有Button或者ImageButton时,Gallery 的Item点击无效
- listview控件当点击进入一个item后返回,仍然返回到点击item时listview所定位到的位置
- 当listview的item的布局中有Button等可点击按钮时,item的点击事件与Button的点击事件处理
- 当Listview中的item与其中的Button/CheckBox的点击事件冲突时……
- 当滑动到顶部和底部时,实现Item的分离效果的ListView
- mfc中,当点击一个button后,如何使其它某些button变为不可用啊?也就是变灰!
- GridView, ListView的item中嵌入button或其他view导致item点击失效的研究
- listView点击一个Item,改变的是其他Item
- Android ListView item中有按钮(Button)不能点击或者条目不能点击的问题
- 当点击一个View时,显示下面隐藏的一个View(折叠的动画效果)
- 现在有动态生成table若干行,每行里会有一个button.当鼠标点击其中一个button时.如何让程序知道是点在第几行的button上
- 回到顶部,当页面下拉到一定高度时,就会出现回到顶部的按钮,点击回到顶部之后,会有一个速度的变化回滚到顶部,如果正在回到顶部时,鼠标的滚轮转动了就会停止回到顶部
- 当div滚动到顶部时,DIV固定在顶部不动,不随滚动条滚动而滚动,除这个div以外的其它元素可以滚动
- RecyclerView存在大量Item时,当滚到底部时快速滑到顶部
- android中listView点击对应item并改变button的文字
- ListView中含有CheckBox或者Button等控件,导致item点击无效的原因。
- 在listView中点击其中的item。获得对应的ID或者别的信息
- Hello World
- mask rcnn模型踩坑指南 tusimple mx-maskrcnn
- enter 回车提交form表单
- 遮罩层注意事项
- cent0S 7 安装 cdh5.13 笔记之二: 安装java,zookeeper,kafka
- 当点击一个button或者是其它view时对应的item滑到顶部
- Akka(42): Http:身份验证
- 获取某一表格的某一行某一列的值
- Spring Boot实战系列教程
- 《剑指offer》刷题笔记(知识迁移能力):和为S的两个数字
- 22、Android开发基础之Activity之间的跳转
- AIOPS是什么,它的未来如何?
- Monkey高级参数的应用
- postgresql归档失败并在日志文件中存在报错