List View和ScrollView冲突的解决以及List View在Scroll View中计算高度

来源:互联网 发布:做外盘用什么软件原油 编辑:程序博客网 时间:2024/05/21 01:27

List View和ScrollView冲突的解决

这是MainActivity

package com.example.dispatchingevents;import android.app.Activity;import android.os.Bundle;import android.view.MotionEvent;import android.view.View;import android.view.View.MeasureSpec;import android.view.View.OnTouchListener;import android.view.ViewGroup;import android.view.ViewGroup.LayoutParams;import android.widget.AbsListView;import android.widget.AbsListView.OnScrollListener;import android.widget.ArrayAdapter;import android.widget.ListView;import android.widget.ScrollView;public class MainActivity extends Activity {ScrollView scroll;ListView list;String[] books = { "A语言", "B语言", "C语言", "D语言", "E语言", "A1语言", "B1语言", "C1语言", "D1语言", "E1语言", "A2语言", "B2语言","C2语言", "D2语言", "E2语言", "A2语言", "B2语言", "C语言", "D语言", "E语言" };@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);scroll = (ScrollView) findViewById(R.id.scroll);list = (ListView) findViewById(R.id.list);ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, books);// 配置给listviewlist.setAdapter(adapter);setListViewHeight(list);list.setOnTouchListener(new OnTouchListener() {@Overridepublic boolean onTouch(View arg0, MotionEvent arg1) {// TODO Auto-generated method stubscroll.requestDisallowInterceptTouchEvent(true);return false;}});list.setOnScrollListener(new OnScrollListener() {@Overridepublic void onScrollStateChanged(AbsListView view, int scrollState) {}@Overridepublic void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {// 计算第一条的索引加上当前页面能显示的listview的总条目的数量,计算出显示的最后一条的索引号int i = firstVisibleItem + visibleItemCount;if (i == totalItemCount) {// 如果scroll.requestDisallowInterceptTouchEvent(false);}}});}public void setListViewHeight(ListView listView) {ArrayAdapter listAdapter = (ArrayAdapter) listView.getAdapter();if (listAdapter == null) {return;}int totalHeight = 0;for (int i = 0; i < listAdapter.getCount(); i++) {View listItem = listAdapter.getView(i, null, listView);if (listItem != null) {listItem.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));listItem.measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED);totalHeight += listItem.getMeasuredHeight();}ViewGroup.LayoutParams params = listView.getLayoutParams();params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1))+ listView.getPaddingTop() + listView.getPaddingBottom();int h = getWindowManager().getDefaultDisplay().getHeight();if (params.height > h / 2) {params.height = h / 2;}listView.setLayoutParams(params);}}@Overrideprotected void onSaveInstanceState(Bundle outState) {// TODO Auto-generated method stuboutState.putInt("prograss", 100);super.onSaveInstanceState(outState);}@Overrideprotected void onRestoreInstanceState(Bundle savedInstanceState) {savedInstanceState.getInt("prograss");super.onRestoreInstanceState(savedInstanceState);}}

0 0
原创粉丝点击