初学Android的时候曾经遇到过在ScrollView中使用ListView的情况。在ScrollView中使用ListView会出现的情况就是你在使用的时候会出现滚动不协调的情况。
下面就是一般对ScrollView的使用的时候的代码:
先给出项目的主xml文件 activity_main.xml:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" > <ScrollView android:id="@+id/mScrollView" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentStart="true"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <ListView android:id="@+id/mListView" android:layout_width="match_parent" android:layout_height="400dp"> </ListView> <ImageView android:src="@drawable/image" android:id="@+id/img1" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <ImageView android:src="@drawable/image" android:id="@+id/img2" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> </ScrollView> </RelativeLayout>
我们自定义了一个ListView的item的布局分件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal"> <TextView android:id="@+id/itemtext" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="24sp"/> </LinearLayout>这个xml文件主要是用来展示listview的每个item的布局
接下来给出主要的java代码块
public class MainActivity extends Activity { private ListView mLView; private ScrollView mSview; private ArrayAdapter<String> adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mLView=(ListView)findViewById(R.id.mListView); mSview=(ScrollView)findViewById(R.id.mScrollView); adapter=new ArrayAdapter<String>(this,R.layout.listview_item_layout,R.id.itemtext,getData()); mLView.setAdapter(adapter); } public List<String> getData(){ List<String> list=new ArrayList<String>(); for (int i = 0; i <20; i++) { list.add("jack"+i); } return list; } }我们一般使用这两个工具的时候 都是这样编写,于是就会出现滚动不协调
解决的办法:重写一个方法加入到java代码块中;如下:
public class MainActivity extends Activity { private ListView mLView; private ScrollView mSview; private ArrayAdapter<String> adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mLView=(ListView)findViewById(R.id.mListView); mSview=(ScrollView)findViewById(R.id.mScrollView); adapter=new ArrayAdapter<String>(this,R.layout.listview_item_layout,R.id.itemtext,getData()); mLView.setAdapter(adapter); } public List<String> getData(){ List<String> list=new ArrayList<String>(); for (int i = 0; i <20; i++) { list.add("jack"+i); } return list; } //拦截事件,进行分发,分发到指定对象中 @Override public boolean dispatchTouchEvent(MotionEvent event){ if(event.getAction()==MotionEvent.ACTION_MOVE){ //将事件分发到listview中 mLView.dispatchTouchEvent(event); } return super.dispatchTouchEvent(event); } }
于是就可以解决滚动冲突了。
第一次写,谢谢光临。