scrollView中实现listView的解决方法

scrollView中实现listView的解决方法 
1.自定义view,采用继承LinearLayout的方式 
2.继承Adapter,本例中采用两种方式进行演示: 
   1.ArrayAdapter 2.BaseAdapter 

先是第一种ArrayAdapter: 
  1. package com.terry.widget;  
  2.   
  3. import java.util.List;  
  4.   
  5. import android.content.Context;  
  6. import android.view.LayoutInflater;  
  7. import android.view.View;  
  8. import android.view.ViewGroup;  
  9. import android.widget.ArrayAdapter;  
  10. import android.widget.TextView;  
  11.   
  12. public class ArrayAdapterForLinearLayout extends ArrayAdapter<String> {  
  13.   
  14.     private LayoutInflater mInflater;  
  15.     private int resource;  
  16.     private List<String> data;  
  17.     private int to;  
  18.       
  19.     public ArrayAdapterForLinearLayout(Context context, int resource,  
  20.             int textViewResourceId, List<String> objects) {  
  21.         super(context, resource, textViewResourceId, objects);  
  22.         this.resource = resource;  
  23.         this.data = objects;  
  24.         this.to = textViewResourceId;  
  25.         this.mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);  
  26.     }  
  27.       
  28.       
  29.     @Override  
  30.     public int getCount() {  
  31.         // TODO Auto-generated method stub  
  32.         return data.size();  
  33.     }  
  34.   
  35.   
  36.     @Override  
  37.     public String getItem(int position) {  
  38.         // TODO Auto-generated method stub  
  39.         return data.get(position);  
  40.     }  
  41.   
  42.     @Override  
  43.     public long getItemId(int position) {  
  44.         // TODO Auto-generated method stub  
  45.         return position;  
  46.     }  
  47.   
  48.     @Override  
  49.     public View getView(int position, View convertView, ViewGroup parent) {  
  50.         convertView = mInflater.inflate(resource, null);  
  51.         String content = data.get(position);  
  52.         View view = convertView.findViewById(to);  
  53.         if (view instanceof TextView) {  
  54.             ((TextView) view).setText(content == null ? "" : content);  
  55.         }  
  56.         convertView.setTag(position);  
  57.         return convertView;  
  58.     }  
  59.       
  60. }  

Java代码   收藏代码
  1. package com.terry.widget;  
  2.   
  3. import android.content.Context;  
  4. import android.util.AttributeSet;  
  5. import android.view.View;  
  6. import android.widget.LinearLayout;  
  7.   
  8. public class LinearLayoutForListView extends LinearLayout {  
  9.     private ArrayAdapterForLinearLayout adapter = null;  
  10.     private OnClickListener onClickListener = null;  
  11.   
  12.     public LinearLayoutForListView(Context context) {  
  13.         super(context);  
  14.     }  
  15.       
  16.     public LinearLayoutForListView(Context context, AttributeSet attrs) {  
  17.         super(context, attrs);  
  18.         // TODO Auto-generated constructor stub  
  19.     }  
  20.   
  21.     /** 
  22.      * 绑定布局 
  23.      */  
  24.     public void bindLinearLayout() {  
  25.         int count = adapter.getCount();  
  26.         for (int i=0;i<count;i++) {  
  27.             View view = adapter.getView(i, nullnull);  
  28.             view.setOnClickListener(this.onClickListener);                              
  29.             //用来消除最后一个下划线  
  30.             if (i == count-1) {  
  31.                 LinearLayout ly = (LinearLayout) view;  
  32.                 ly.removeViewAt(1);  
  33.             }  
  34.             addView(view,i);  
  35.         }  
  36.     }  
  37.       
  38.     public ArrayAdapterForLinearLayout getAdapter() {  
  39.         return adapter;  
  40.     }  
  41.   
  42.     public void setAdapter(ArrayAdapterForLinearLayout adapter) {  
  43.         this.adapter = adapter;  
  44.         bindLinearLayout();  
  45.     }  
  46.   
  47.     public OnClickListener getOnClickListener() {  
  48.         return onClickListener;  
  49.     }  
  50.   
  51.     public void setOnClickListener(OnClickListener onClickListener) {  
  52.         this.onClickListener = onClickListener;  
  53.     }  
  54.       
  55. }  

Java代码   收藏代码
  1. package com.terry.widget;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.List;  
  5.   
  6. import android.app.Activity;  
  7. import android.os.Bundle;  
  8. import android.widget.ScrollView;  
  9.   
  10. public class Main extends Activity {  
  11.     private LinearLayoutForListView lv = null;  
  12.     private List<String> list = new ArrayList<String>();  
  13.     private ScrollView scrollView = null;  
  14.     @Override  
  15.     public void onCreate(Bundle savedInstanceState) {  
  16.         super.onCreate(savedInstanceState);  
  17.         setContentView(R.layout.main);  
  18.         scrollView = (ScrollView) findViewById(R.id.MAIN_VIEW_DETAIL);  
  19.         scrollView.setSmoothScrollingEnabled(true);  
  20.         scrollView.fullScroll(ScrollView.FOCUS_UP);  
  21.         scrollView.fullScroll(ScrollView.FOCUS_DOWN);  
  22.         lv = (LinearLayoutForListView) findViewById(R.id.ListView01);  
  23.         for (int i=0;i<40;i++) {  
  24.             list.add("name"+i);  
  25.         }  
  26.         ArrayAdapterForLinearLayout layoutadapter = new ArrayAdapterForLinearLayout(this, R.layout.test, R.id.TextView01, list);  
  27.         lv.setAdapter(layoutadapter);  
  28.     }  
  29. }  

main.xml  主布局xml 
Java代码   收藏代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_height="fill_parent" android:layout_width="fill_parent"  
  4.     android:id="@+id/MAIN_VIEW_DETAIL" android:scrollbars="vertical">  
  5. <com.terry.widget.LinearLayoutForListView   
  6.     android:orientation="vertical" android:layout_width="450px"  
  7.     android:layout_height="fill_parent" android:id="@+id/ListView01">  
  8. </com.terry.widget.LinearLayoutForListView>  
  9. </ScrollView>  

test.xml 
Java代码   收藏代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout  
  3.   xmlns:android="http://schemas.android.com/apk/res/android"  
  4.   android:layout_width="fill_parent" android:orientation="vertical"  
  5.   android:layout_height="fill_parent">  
  6.     
  7.   <TextView android:id="@+id/TextView01"  
  8.         android:layout_marginLeft="10px"  
  9.         android:layout_width="wrap_content" android:layout_height="wrap_content">  
  10.     </TextView>  
  11.       
  12.     <View android:layout_height="1px" android:background="#FFFFFF"  
  13.         android:layout_width="fill_parent"></View>  
  14.     
  15. </LinearLayout>  


第二种BaseAdapter: 
Java代码   收藏代码
  1. package com.terry.widget;  
  2.   
  3. import java.util.List;  
  4. import java.util.Map;  
  5.   
  6. import android.content.Context;  
  7. import android.view.LayoutInflater;  
  8. import android.view.View;  
  9. import android.view.ViewGroup;  
  10. import android.widget.BaseAdapter;  
  11. import android.widget.TextView;  
  12.   
  13. public class AdapterForLinearLayout extends BaseAdapter {  
  14.     private LayoutInflater mInflater;  
  15.     private int resource;  
  16.     private List<? extends Map<String, ?>> data;  
  17.     private String[] from;  
  18.     private int[] to;  
  19.       
  20.       
  21.       
  22.     public AdapterForLinearLayout(Context context, List<? extends Map<String, ?>> data, int resouce, String[] from, int[] to) {  
  23.         this.data = data;  
  24.         this.resource = resouce;  
  25.         this.data = data;  
  26.         this.from = from;  
  27.         this.to = to;  
  28.         this.mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);  
  29.     }  
  30.   
  31.     @Override  
  32.     public int getCount() {  
  33.         // TODO Auto-generated method stub  
  34.         return data.size();  
  35.     }  
  36.   
  37.     @Override  
  38.     public Object getItem(int arg0) {  
  39.         // TODO Auto-generated method stub  
  40.         return data.get(arg0);  
  41.     }  
  42.       
  43.     @SuppressWarnings("unchecked")  
  44.     public String get(int position,Object key) {  
  45.         Map<String, ?> map = (Map<String, ?>) getItem(position);  
  46.         return map.get(key).toString();  
  47.     }  
  48.       
  49.     @Override  
  50.     public long getItemId(int arg0) {  
  51.         // TODO Auto-generated method stub  
  52.         return arg0;  
  53.     }  
  54.   
  55.     @Override  
  56.     public View getView(int position, View convertView, ViewGroup parent) {  
  57.         convertView = mInflater.inflate(resource, null);  
  58.         Map<String, ?> item = data.get(position);  
  59.         int count = to.length;  
  60.         for (int i=0;i<count;i++) {  
  61.             View view = convertView.findViewById(to[i]);  
  62.             bindView(view, item, from[i]);  
  63.         }  
  64.         convertView.setTag(position);  
  65.         return convertView;  
  66.     }  
  67.       
  68.     private void bindView(View view,Map<String, ?> item,String from) {  
  69.         Object data = item.get(from);  
  70.         if (view instanceof TextView) {  
  71.             ((TextView) view).setText(data == null ? "" : data.toString());  
  72.         }  
  73.     }  
  74. }  

Java代码   收藏代码
  1. package com.terry.widget;  
  2.   
  3. import android.content.Context;  
  4. import android.util.AttributeSet;  
  5. import android.view.View;  
  6. import android.widget.LinearLayout;  
  7.   
  8. public class LinearLayoutForListView extends LinearLayout {  
  9.     private AdapterForLinearLayout adapter = null;  
  10.     private OnClickListener onClickListener = null;  
  11.   
  12.     public LinearLayoutForListView(Context context) {  
  13.         super(context);  
  14.     }  
  15.       
  16.     public LinearLayoutForListView(Context context, AttributeSet attrs) {  
  17.         super(context, attrs);  
  18.         // TODO Auto-generated constructor stub  
  19.     }  
  20.   
  21.     /** 
  22.      * 绑定布局 
  23.      */  
  24.     public void bindLinearLayout() {  
  25.         int count = adapter.getCount();  
  26.         for (int i=0;i<count;i++) {  
  27.             View view = adapter.getView(i, nullnull);  
  28.             view.setOnClickListener(this.onClickListener);  
  29.             if (i == count-1) {  
  30.                 LinearLayout ly = (LinearLayout) view;  
  31.                 ly.removeViewAt(2);  
  32.             }  
  33.             addView(view, i);  
  34.         }  
  35.     }  
  36.       
  37.     public AdapterForLinearLayout getAdapter() {  
  38.         return adapter;  
  39.     }  
  40.   
  41.     public void setAdapter(AdapterForLinearLayout adapter) {  
  42.         this.adapter = adapter;  
  43.         bindLinearLayout();  
  44.     }  
  45.   
  46.     public OnClickListener getOnClickListener() {  
  47.         return onClickListener;  
  48.     }  
  49.   
  50.     public void setOnClickListener(OnClickListener onClickListener) {  
  51.         this.onClickListener = onClickListener;  
  52.     }  
  53.       
  54. }  

Java代码   收藏代码
  1. package com.terry.widget;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.HashMap;  
  5. import java.util.List;  
  6.   
  7. import android.app.Activity;  
  8. import android.os.Bundle;  
  9. import android.widget.ScrollView;  
  10.   
  11. public class Main extends Activity {  
  12.     private LinearLayoutForListView lv = null;  
  13.     private List<HashMap<String, Object>> list = new ArrayList<HashMap<String,Object>>();  
  14.     private ScrollView scrollView = null;  
  15.     @Override  
  16.     public void onCreate(Bundle savedInstanceState) {  
  17.         super.onCreate(savedInstanceState);  
  18.         setContentView(R.layout.main);  
  19.         scrollView = (ScrollView) findViewById(R.id.MAIN_VIEW_DETAIL);  
  20.         scrollView.setSmoothScrollingEnabled(true);  
  21.         scrollView.fullScroll(ScrollView.FOCUS_UP);  
  22.         scrollView.fullScroll(ScrollView.FOCUS_DOWN);  
  23.         lv = (LinearLayoutForListView) findViewById(R.id.ListView01);  
  24.         for (int i = 0; i < 10; i++) {  
  25.             HashMap<String, Object> map = new HashMap<String, Object>();  
  26.             map.put("key_name""name" + i);  
  27.             map.put("value_name""value" + i);  
  28.             list.add(map);  
  29.         }  
  30.         AdapterForLinearLayout layoutadapter = new AdapterForLinearLayout(this, list, R.layout.test, new String[] { "key_name",  
  31.         "value_name" }, new int[] { R.id.TextView01,R.id.TextView02 });  
  32.         lv.setAdapter(layoutadapter);  
  33.     }  
  34. }  


主布局xml man.xml 
Java代码   收藏代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_height="fill_parent" android:layout_width="fill_parent"  
  4.     android:id="@+id/MAIN_VIEW_DETAIL" android:scrollbars="vertical">  
  5. <com.terry.widget.LinearLayoutForListView   
  6.     android:orientation="vertical" android:layout_width="450px"  
  7.     android:layout_height="fill_parent" android:id="@+id/ListView01">  
  8. </com.terry.widget.LinearLayoutForListView>  
  9. </ScrollView>  

test.xml 
Java代码   收藏代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout  
  3.   xmlns:android="http://schemas.android.com/apk/res/android"  
  4.   android:layout_width="fill_parent" android:orientation="vertical"  
  5.   android:layout_height="fill_parent">  
  6.     
  7.   <TextView android:id="@+id/TextView01"  
  8.         android:layout_marginLeft="10px" android:textAppearance="?android:attr/textAppearanceLarge"  
  9.         android:layout_width="wrap_content" android:layout_height="wrap_content">  
  10.     </TextView>  
  11.     <TextView android:id="@+id/TextView02" android:layout_width="wrap_content"  
  12.         android:textAppearance="?android:attr/textAppearanceSmall"  
  13.         android:layout_marginLeft="10px" android:layout_height="wrap_content">  
  14.     </TextView>  
  15.       
  16.     <View android:layout_height="1px" android:background="#FFFFFF"  
  17.         android:layout_width="fill_parent"></View>  
  18.     
  19. </LinearLayout>  

事件操作,并通过下标得到数据源: 
Java代码   收藏代码
  1. lv.setOnclickLinstener(new OnClickListener() {  
  2.   
  3.             @Override  
  4.             public void onClick(View v) {  
  5.                 // TODO Auto-generated method stub  
  6.                 Toast.makeText(  
  7.                         BlueToothActivity.this,  
  8.                         Layoutadpater.get(Integer.parseInt(v.getTag()  
  9.                                 .toString()), "key_name"), 1000).show();  
  10.             }  
  11.         });  
  12.         lv.setAdapter(Layoutadpater);  
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值