首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

scrollView中实现listView的解决办法

2012-07-20 
scrollView中实现listView的解决方法scrollView中实现listView的解决方法1.自定义view,采用继承LinearLayo

scrollView中实现listView的解决方法
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);}@Overridepublic int getCount() {// TODO Auto-generated method stubreturn data.size();}@Overridepublic String getItem(int position) {// TODO Auto-generated method stubreturn data.get(position);}@Overridepublic long getItemId(int position) {// TODO Auto-generated method stubreturn position;}@Overridepublic 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);}@Overridepublic int getCount() {// TODO Auto-generated method stubreturn data.size();}@Overridepublic Object getItem(int arg0) {// TODO Auto-generated method stubreturn data.get(arg0);}@SuppressWarnings("unchecked")public String get(int position,Object key) {Map<String, ?> map = (Map<String, ?>) getItem(position);return map.get(key).toString();}@Overridepublic long getItemId(int arg0) {// TODO Auto-generated method stubreturn arg0;}@Overridepublic 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);
1 楼 龙哥IT 2011-11-24   这个案例可不可以分页啊? 2 楼 龙哥IT 2011-11-24   动态加载分页 3 楼 xuehaipeng 2011-12-30   龙哥IT 写道这个案例可不可以分页啊?
这个例子只是支持ScrollView和ListView并存,动态数据加载以及分页我没做。

热点排行