- 浏览: 52747 次
- 性别:
- 来自: 西安
最近访客 更多访客>>
最新评论
-
gundumw100:
如何反过来旋转?比如按一下顺时针旋转,在按一下逆时针旋转。
android视图360度旋转效果 -
xuehaipeng:
<div class="quote_title ...
scrollView中实现listView的解决方法 -
龙哥IT:
动态加载分页
scrollView中实现listView的解决方法 -
龙哥IT:
这个案例可不可以分页啊?
scrollView中实现listView的解决方法 -
xwq18:
谢谢了,很好很强大
java时间差
scrollView中实现listView的解决方法
1.自定义view,采用继承LinearLayout的方式
2.继承Adapter,本例中采用两种方式进行演示:
1.ArrayAdapter 2.BaseAdapter
先是第一种ArrayAdapter:
main.xml 主布局xml
test.xml
第二种BaseAdapter:
主布局xml man.xml
test.xml
事件操作,并通过下标得到数据源:
这个例子只是支持ScrollView和ListView并存,动态数据加载以及分页我没做。
1.自定义view,采用继承LinearLayout的方式
2.继承Adapter,本例中采用两种方式进行演示:
1.ArrayAdapter 2.BaseAdapter
先是第一种ArrayAdapter:
package com.terry.widget; import java.util.List; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.TextView; public class ArrayAdapterForLinearLayout extends ArrayAdapter<String> { private LayoutInflater mInflater; private int resource; private List<String> data; private int to; public ArrayAdapterForLinearLayout(Context context, int resource, int textViewResourceId, List<String> objects) { super(context, resource, textViewResourceId, objects); this.resource = resource; this.data = objects; this.to = textViewResourceId; this.mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); } @Override public int getCount() { // TODO Auto-generated method stub return data.size(); } @Override public String getItem(int position) { // TODO Auto-generated method stub return data.get(position); } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { convertView = mInflater.inflate(resource, null); String content = data.get(position); View view = convertView.findViewById(to); if (view instanceof TextView) { ((TextView) view).setText(content == null ? "" : content); } convertView.setTag(position); return convertView; } }
package com.terry.widget; import android.content.Context; import android.util.AttributeSet; import android.view.View; import android.widget.LinearLayout; public class LinearLayoutForListView extends LinearLayout { private ArrayAdapterForLinearLayout adapter = null; private OnClickListener onClickListener = null; public LinearLayoutForListView(Context context) { super(context); } public LinearLayoutForListView(Context context, AttributeSet attrs) { super(context, attrs); // TODO Auto-generated constructor stub } /** * 绑定布局 */ public void bindLinearLayout() { int count = adapter.getCount(); for (int i=0;i<count;i++) { View view = adapter.getView(i, null, null); view.setOnClickListener(this.onClickListener); //用来消除最后一个下划线 if (i == count-1) { LinearLayout ly = (LinearLayout) view; ly.removeViewAt(1); } addView(view,i); } } public ArrayAdapterForLinearLayout getAdapter() { return adapter; } public void setAdapter(ArrayAdapterForLinearLayout adapter) { this.adapter = adapter; bindLinearLayout(); } public OnClickListener getOnClickListener() { return onClickListener; } public void setOnClickListener(OnClickListener onClickListener) { this.onClickListener = onClickListener; } }
package com.terry.widget; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.os.Bundle; import android.widget.ScrollView; public class Main extends Activity { private LinearLayoutForListView lv = null; private List<String> list = new ArrayList<String>(); private ScrollView scrollView = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); scrollView = (ScrollView) findViewById(R.id.MAIN_VIEW_DETAIL); scrollView.setSmoothScrollingEnabled(true); scrollView.fullScroll(ScrollView.FOCUS_UP); scrollView.fullScroll(ScrollView.FOCUS_DOWN); lv = (LinearLayoutForListView) findViewById(R.id.ListView01); for (int i=0;i<40;i++) { list.add("name"+i); } ArrayAdapterForLinearLayout layoutadapter = new ArrayAdapterForLinearLayout(this, R.layout.test, R.id.TextView01, list); lv.setAdapter(layoutadapter); } }
main.xml 主布局xml
<?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_height="fill_parent" android:layout_width="fill_parent" android:id="@+id/MAIN_VIEW_DETAIL" android:scrollbars="vertical"> <com.terry.widget.LinearLayoutForListView android:orientation="vertical" android:layout_width="450px" android:layout_height="fill_parent" android:id="@+id/ListView01"> </com.terry.widget.LinearLayoutForListView> </ScrollView>
test.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:orientation="vertical" android:layout_height="fill_parent"> <TextView android:id="@+id/TextView01" android:layout_marginLeft="10px" android:layout_width="wrap_content" android:layout_height="wrap_content"> </TextView> <View android:layout_height="1px" android:background="#FFFFFF" android:layout_width="fill_parent"></View> </LinearLayout>
第二种BaseAdapter:
package com.terry.widget; import java.util.List; import java.util.Map; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; public class AdapterForLinearLayout extends BaseAdapter { private LayoutInflater mInflater; private int resource; private List<? extends Map<String, ?>> data; private String[] from; private int[] to; public AdapterForLinearLayout(Context context, List<? extends Map<String, ?>> data, int resouce, String[] from, int[] to) { this.data = data; this.resource = resouce; this.data = data; this.from = from; this.to = to; this.mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); } @Override public int getCount() { // TODO Auto-generated method stub return data.size(); } @Override public Object getItem(int arg0) { // TODO Auto-generated method stub return data.get(arg0); } @SuppressWarnings("unchecked") public String get(int position,Object key) { Map<String, ?> map = (Map<String, ?>) getItem(position); return map.get(key).toString(); } @Override public long getItemId(int arg0) { // TODO Auto-generated method stub return arg0; } @Override public View getView(int position, View convertView, ViewGroup parent) { convertView = mInflater.inflate(resource, null); Map<String, ?> item = data.get(position); int count = to.length; for (int i=0;i<count;i++) { View view = convertView.findViewById(to[i]); bindView(view, item, from[i]); } convertView.setTag(position); return convertView; } private void bindView(View view,Map<String, ?> item,String from) { Object data = item.get(from); if (view instanceof TextView) { ((TextView) view).setText(data == null ? "" : data.toString()); } } }
package com.terry.widget; import android.content.Context; import android.util.AttributeSet; import android.view.View; import android.widget.LinearLayout; public class LinearLayoutForListView extends LinearLayout { private AdapterForLinearLayout adapter = null; private OnClickListener onClickListener = null; public LinearLayoutForListView(Context context) { super(context); } public LinearLayoutForListView(Context context, AttributeSet attrs) { super(context, attrs); // TODO Auto-generated constructor stub } /** * 绑定布局 */ public void bindLinearLayout() { int count = adapter.getCount(); for (int i=0;i<count;i++) { View view = adapter.getView(i, null, null); view.setOnClickListener(this.onClickListener); if (i == count-1) { LinearLayout ly = (LinearLayout) view; ly.removeViewAt(2); } addView(view, i); } } public AdapterForLinearLayout getAdapter() { return adapter; } public void setAdapter(AdapterForLinearLayout adapter) { this.adapter = adapter; bindLinearLayout(); } public OnClickListener getOnClickListener() { return onClickListener; } public void setOnClickListener(OnClickListener onClickListener) { this.onClickListener = onClickListener; } }
package com.terry.widget; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import android.app.Activity; import android.os.Bundle; import android.widget.ScrollView; public class Main extends Activity { private LinearLayoutForListView lv = null; private List<HashMap<String, Object>> list = new ArrayList<HashMap<String,Object>>(); private ScrollView scrollView = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); scrollView = (ScrollView) findViewById(R.id.MAIN_VIEW_DETAIL); scrollView.setSmoothScrollingEnabled(true); scrollView.fullScroll(ScrollView.FOCUS_UP); scrollView.fullScroll(ScrollView.FOCUS_DOWN); lv = (LinearLayoutForListView) findViewById(R.id.ListView01); for (int i = 0; i < 10; i++) { HashMap<String, Object> map = new HashMap<String, Object>(); map.put("key_name", "name" + i); map.put("value_name", "value" + i); list.add(map); } AdapterForLinearLayout layoutadapter = new AdapterForLinearLayout(this, list, R.layout.test, new String[] { "key_name", "value_name" }, new int[] { R.id.TextView01,R.id.TextView02 }); lv.setAdapter(layoutadapter); } }
主布局xml man.xml
<?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_height="fill_parent" android:layout_width="fill_parent" android:id="@+id/MAIN_VIEW_DETAIL" android:scrollbars="vertical"> <com.terry.widget.LinearLayoutForListView android:orientation="vertical" android:layout_width="450px" android:layout_height="fill_parent" android:id="@+id/ListView01"> </com.terry.widget.LinearLayoutForListView> </ScrollView>
test.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:orientation="vertical" android:layout_height="fill_parent"> <TextView android:id="@+id/TextView01" android:layout_marginLeft="10px" android:textAppearance="?android:attr/textAppearanceLarge" android:layout_width="wrap_content" android:layout_height="wrap_content"> </TextView> <TextView android:id="@+id/TextView02" android:layout_width="wrap_content" android:textAppearance="?android:attr/textAppearanceSmall" android:layout_marginLeft="10px" android:layout_height="wrap_content"> </TextView> <View android:layout_height="1px" android:background="#FFFFFF" android:layout_width="fill_parent"></View> </LinearLayout>
事件操作,并通过下标得到数据源:
lv.setOnclickLinstener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Toast.makeText( BlueToothActivity.this, Layoutadpater.get(Integer.parseInt(v.getTag() .toString()), "key_name"), 1000).show(); } }); lv.setAdapter(Layoutadpater);
评论
3 楼
xuehaipeng
2011-12-30
龙哥IT 写道
这个案例可不可以分页啊?
这个例子只是支持ScrollView和ListView并存,动态数据加载以及分页我没做。
2 楼
龙哥IT
2011-11-24
动态加载分页
1 楼
龙哥IT
2011-11-24
这个案例可不可以分页啊?
发表评论
-
Android Intent的几种用法全面总结(转载)
2011-08-02 14:00 870Intent应该算是Android中特有的东西。你可以在Int ... -
android完全关闭应用程序
2011-08-02 14:00 705在工作过程序中遇到一个需要完全关闭应用程序的问题,在网络上找了 ... -
GestureDetector的用法
2011-08-02 14:00 1168今天学习的是GestureDetector的学习。该类定义了许 ... -
android视图360度旋转效果
2011-08-02 13:58 39651.重写Animation动画类,定义360度旋转 pac ...
相关推荐
4. 在ScrollView中添加自定义的ListView,并确保内容填充到ListView中。 通过这种方式,我们自定义的ListView可以在ScrollView中正常工作,既保留了ListView的滚动优化,又解决了与ScrollView的冲突问题。在实际...
3. **使用HeadView和FootView**:在ListView中添加HeadView和FootView,模拟ScrollView的效果。将需要在ScrollView中显示的内容作为ListView的头尾视图,然后让ListView中的其他内容滚动。但这种方法可能不适用于...
接下来,我们来看如何在代码中实现ScrollView嵌套ListView: 1. 首先,创建一个布局文件,将NestedScrollView作为根视图,然后在其内部添加一个LinearLayout或其他布局,作为ListView的父视图。 2. 在LinearLayout...
2. 对ListView中的每个Item进行复用,通过Adapter的convertView机制减少对象创建。 3. 使用ViewHolder模式提高ListView的滚动性能。 ### 文件`TestPullDown` 这个文件可能是用于测试下拉刷新功能的代码示例或资源...
标题“ListViewForScrollView实现Scrollview中嵌套listView.zip”指的是一个解决方案,它允许在ScrollView内集成ListView,同时确保两者都能独立滑动,而不会相互干扰。 首先,我们要理解Android中的ScrollView和...
在Android开发中,ScrollView和ListView是两种常用的布局组件,它们分别用于实现可滚动的大视图和展示多行可滚动的数据列表。然而,在实际应用中,当这两种组件同时存在于一个界面时,滚动冲突的问题就会出现,导致...
本篇将详细介绍如何解决这种冲突,确保在ScrollView中滑动ListView时,只响应ListView的滑动。 首先,我们要理解ScrollView和ListView的工作原理。ScrollView是一个可滚动的布局容器,它可以包含一个或多个视图,并...
这种方式将ScrollView的功能合并到ListView中,避免了直接嵌套。例如: ```java View headerView = getLayoutInflater().inflate(R.layout.scrollable_header, null); listView.addHeaderView(headerView); ``` **...
在ListView中,你需要确保在手指离开屏幕时将滑动事件传递回ScrollView。 ```java public class CustomScrollView extends ScrollView { // ... @Override public boolean onInterceptTouchEvent(MotionEvent ev...
ScrollView中嵌套ListView,还可以嵌套多个listview 解决无法共存问题。放到项目中可以直接用
总之,虽然在ScrollView中嵌入ListView可以实现特定的布局需求,但这并不推荐,因为它可能导致性能问题和用户体验下降。更建议采用RecyclerView或者利用ListView的footer功能来实现类似效果。在实际开发中,应根据...
解决方法是在ListView中设置`android:nestedScrollingEnabled="false"`,防止ListView内部的滚动影响到外层的ScrollView。 2. **性能优化**:嵌套列表会导致重绘次数增多,影响性能。尽量减少嵌套层数,对于嵌套的...
ListView的高度出了问题,始终只显示一点,并且滑动也有问题,Android默认是禁止将ListView潜逃在ScrollView里面的,虽然这种设计不被推崇,但是后来到Stackoverflow上找到了一个解决方法,那就是在为ListView设置...
同时,在ListView中,我们可以在需要时调用父View(即ScrollView)的requestDisallowInterceptTouchEvent(true)方法,禁止父View截取触摸事件。 以下是一个简单的示例代码,展示了如何实现这个解决方案: ```java ...
解决方法是在ListView内部使用一个独立的ScrollView,或者使用嵌套滚动(NestedScrolling)API,如NestedScrollView,它能够更好地处理嵌套滚动场景。 2. **性能问题**:由于ScrollView会尝试加载其所有子视图,这...
本Demo通过自定义ListView,实现了在ScrollView中嵌套ListView而不发生冲突的效果,从而提供了一种有效的解决方案。通过学习和实践这个Demo,开发者可以更深入地理解Android布局组件的交互,并能更好地处理类似的...
在Android开发中,ScrollView、ListView和GridView是三个非常重要的视图组件,它们分别用于实现不同的滚动展示效果。本文将深入探讨如何在Android应用中正确地嵌套这些组件,以及处理可能遇到的问题。 首先,...
用于解决scrollview组件嵌套listview组件时候 两者之间的冲突问题
本文将深入探讨如何正确地在Android应用中实现ScrollView与ListView、ViewPager的共存。 首先,我们来看ScrollView。ScrollView是一个可以包含多个子视图并允许用户滚动查看这些视图的容器。它通常用于包含内容过多...
在提供的MyListView文件中,可能就包含了自定义ListView解决滑动冲突的实现代码。通过查看和分析这个文件,我们可以学习到如何在代码层面解决此类问题,加深对Android事件分发机制的理解,并提升自定义控件的能力。 ...