1. package com.rytong.mylist;
    2. import java.util.ArrayList;
    3. import java.util.HashMap;
    4. import java.util.List;
    5. import java.util.Random;
    6. import android.app.Activity;
    7. import android.content.Context;
    8. import android.graphics.Color;
    9. import android.graphics.Rect;
    10. import android.os.Bundle;
    11. import android.view.MotionEvent;
    12. import android.view.View;
    13. import android.view.ViewGroup;
    14. import android.widget.AbsListView;
    15. import android.widget.BaseAdapter;
    16. import android.widget.HorizontalScrollView;
    17. import android.widget.LinearLayout;
    18. import android.widget.LinearLayout.LayoutParams;
    19. import android.widget.ListView;
    20. import android.widget.TextView;
    21. public class SuperTables extends Activity {
    22. public static final LayoutParams FULL = new LayoutParams(
    23. LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
    24. public static final LayoutParams DEFINDELP = new LayoutParams(100, 200);
    25. public static final LayoutParams TEXTLP = new LayoutParams(100, 50);
    26. public static final int TEXTSIZE = 20;
    27. private LinearLayout mainLly;
    28. private ListView leftLst;
    29. private LinearLayout leftLly;
    30. private HorizontalScrollView rightHsv;
    31. private LinearLayout rightLly;
    32. private ListView rightLst;
    33. @Override
    34. protected void onCreate(Bundle savedInstanceState) {
    35. // TODO Auto-generated method stub
    36. super.onCreate(savedInstanceState);
    37. mainLly = new LinearLayout(this);
    38. mainLly.setLayoutParams(FULL);
    39. mainLly.setOrientation(LinearLayout.HORIZONTAL);
    40. initLeft();
    41. initRight();
    42. setCascading();
    43. setContentView(mainLly);
    44. }
    45. private void initLeft() {
    46. leftLly = new LinearLayout(this);
    47. leftLly.setOrientation(LinearLayout.VERTICAL);
    48. leftLly.setLayoutParams(DEFINDELP);
    49. leftLst = new ListView(this);
    50. leftLst.setLayoutParams(FULL);
    51. // 添加ListView头部视图
    52. LinearLayout leftHead = new LinearLayout(this);
    53. // leftHead.setLayoutParams(TEXTLP);
    54. TextView tv = new TextView(this);
    55. tv.setText("title");
    56. tv.setTextSize(TEXTSIZE);
    57. tv.setLayoutParams(TEXTLP);
    58. leftHead.addView(tv);
    59. leftLly.addView(leftHead);
    60. // leftLst.addHeaderView(leftHead);
    61. leftLst.setAdapter(new LeftLstAdapter(this, new String[] { "0.0.0.0",
    62. "1.1.1.1", "2.2.2.2", "3.3.3.3", "4.4.4.4", "5.5.5.5",
    63. "6.6.6.6", "7.7.7.7", "8.8.8.8", "9.9.9.9" }));
    64. //leftLst.setScrollBarStyle();
    65. //leftLst.setScrollBarStyle(0);
    66. leftLst.setCacheColorHint(Color.TRANSPARENT);
    67. leftLst.setAlwaysDrawnWithCacheEnabled(true);
    68. //隐藏滚动条
    69. leftLst.setVerticalScrollBarEnabled(false);
    70. leftLly.addView(leftLst);
    71. leftLly.setBackgroundColor(Color.WHITE);
    72. mainLly.addView(leftLly);
    73. getWindow().getDecorView();
    74. }
    75. public class LeftLstAdapter extends BaseAdapter {
    76. private Context context_;
    77. private String[] data_;
    78. public LeftLstAdapter(Context context, String[] data) {
    79. // TODO Auto-generated constructor stub
    80. this.context_ = context;
    81. this.data_ = data;
    82. }
    83. @Override
    84. public int getCount() {
    85. // TODO Auto-generated method stub
    86. return data_.length;
    87. }
    88. @Override
    89. public Object getItem(int position) {
    90. // TODO Auto-generated method stub
    91. return data_[position];
    92. }
    93. @Override
    94. public long getItemId(int position) {
    95. // TODO Auto-generated method stub
    96. return position;
    97. }
    98. @Override
    99. public View getView(int position, View convertView, ViewGroup parent) {
    100. // TODO Auto-generated method stub
    101. LinearLayout lly = new LinearLayout(context_);
    102. TextView tv = new TextView(context_);
    103. tv.setLayoutParams(TEXTLP);
    104. tv.setText(data_[position]);
    105. tv.setTextSize(TEXTSIZE);
    106. lly.addView(tv);
    107. return lly;
    108. }
    109. }
    110. public static final String[] TITLES = new String[] { "name", "sex", "age",
    111. "school", "salary", "spouse" };
    112. private void initRight() {
    113. rightHsv = new HorizontalScrollView(this);
    114. rightHsv.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
    115. 200));
    116. rightLly = new LinearLayout(this);
    117. rightLly.setOrientation(LinearLayout.VERTICAL);
    118. rightLly.setLayoutParams(FULL);
    119. // 右侧ListVie标题
    120. LinearLayout lly = new LinearLayout(this);
    121. lly.setLayoutParams(new LayoutParams(100 * TITLES.length, 50));
    122. lly.setOrientation(LinearLayout.HORIZONTAL);
    123. TextView t = null;
    124. LinearLayout ly = null;
    125. for (int i = 0; i < TITLES.length; i++) {
    126. ly = new LinearLayout(this);
    127. ly.setLayoutParams(TEXTLP);
    128. t = new TextView(this);
    129. t.setText(TITLES[i]);
    130. t.setTextSize(TEXTSIZE);
    131. ly.addView(t);
    132. // t.setLayoutParams(TEXTLP);
    133. lly.addView(ly);
    134. }
    135. rightLly.addView(lly);
    136. rightLst = new ListView(this);
    137. rightLst.setAdapter(new RightAdapter(this, getData()));
    138. rightLly.addView(rightLst);
    139. rightHsv.addView(rightLly);
    140. rightHsv.setPadding(20, 0, 0, 0);
    141. mainLly.addView(rightHsv);
    142. }
    143. // 设置联动
    144. private void setCascading() {
    145. rightLst.setOnTouchListener(new View.OnTouchListener() {
    146. @Override
    147. public boolean onTouch(View v, MotionEvent event) {
    148. // TODO Auto-generated method stub
    149. leftLst.dispatchTouchEvent(event);
    150. return false;
    151. }
    152. });
    153. leftLst.setOnScrollListener(new AbsListView.OnScrollListener() {
    154. @Override
    155. public void onScrollStateChanged(AbsListView view, int scrollState) {
    156. // TODO Auto-generated method stub
    157. }
    158. @Override
    159. public void onScroll(AbsListView view, int firstVisibleItem,
    160. int visibleItemCount, int totalItemCount) {
    161. if (leftLst.getChildAt(0) != null) {
    162. Rect r = new Rect();
    163. leftLst.getChildVisibleRect(leftLst.getChildAt(0), r, null);
    164. rightLst.setSelectionFromTop(
    165. leftLst.getFirstVisiblePosition(), r.top);
    166. }
    167. }
    168. });
    169. }
    170. public List<HashMap<String, String>> getData() {
    171. List<HashMap<String, String>> data = new ArrayList<HashMap<String, String>>();
    172. HashMap<String, String> dataItem = null;
    173. Random rd = new Random();
    174. for (int i = 0; i < 9; i++) {
    175. dataItem = new HashMap<String, String>();
    176. for (int j = 0; j < TITLES.length; j++) {
    177. dataItem.put(TITLES[j],  i + "");//rd.nextInt(10000)
    178. }
    179. data.add(dataItem);
    180. }
    181. return data;
    182. }
    183. public class RightAdapter extends BaseAdapter {
    184. Context context_;
    185. List<HashMap<String, String>> data_;
    186. public RightAdapter(Context context, List<HashMap<String, String>> data) {
    187. // TODO Auto-generated constructor stub
    188. this.context_ = context;
    189. this.data_ = data;
    190. }
    191. @Override
    192. public int getCount() {
    193. // TODO Auto-generated method stub
    194. return data_.size();
    195. }
    196. @Override
    197. public Object getItem(int position) {
    198. // TODO Auto-generated method stub
    199. return data_.get(position);
    200. }
    201. @Override
    202. public long getItemId(int position) {
    203. // TODO Auto-generated method stub
    204. return position;
    205. }
    206. @Override
    207. public View getView(int position, View convertView, ViewGroup parent) {
    208. LinearLayout lly = new LinearLayout(context_);
    209. lly.setOrientation(LinearLayout.HORIZONTAL);
    210. TextView tv = null;
    211. for (int i = 0, size = data_.get(position).size(); i < size; i++) {
    212. tv = new TextView(context_);
    213. tv.setLayoutParams(TEXTLP);
    214. tv.setText(data_.get(position).get(TITLES[i]));
    215. tv.setTextSize(TEXTSIZE);
    216. lly.addView(tv);
    217. }
    218. return lly;
    219. }
    220. }
    221. }
    222.   总结:用此方法来实现存在较大弊端,在高版本手机中会明显出现跳格现象,有时并不准确,所以慎用之!!!!!!!!!

android 带表头,左右两个联动的ListView的更多相关文章

  1. Android -- 带你从源码角度领悟Dagger2入门到放弃

    1,以前的博客也写了两篇关于Dagger2,但是感觉自己使用的时候还是云里雾里的,更不谈各位来看博客的同学了,所以今天打算和大家再一次的入坑试试,最后一次了,保证最后一次了. 2,接入项目 在项目的G ...

  2. Android -- 带你从源码角度领悟Dagger2入门到放弃(二)

    1,接着我们上一篇继续介绍,在上一篇我们介绍了简单的@Inject和@Component的结合使用,现在我们继续以老师和学生的例子,我们知道学生上课的时候都会有书籍来辅助听课,先来看看我们之前的Stu ...

  3. Android -- 带你从源码角度领悟Dagger2入门到放弃(一)

    1,以前的博客也写了两篇关于Dagger2,但是感觉自己使用的时候还是云里雾里的,更不谈各位来看博客的同学了,所以今天打算和大家再一次的入坑试试,最后一次了,保证最后一次了. 2,接入项目 在项目的G ...

  4. Python与数据结构[0] -> 链表/LinkedList[0] -> 单链表与带表头单链表的 Python 实现

    单链表 / Linked List 目录 单链表 带表头单链表 链表是一种基本的线性数据结构,在C语言中,这种数据结构通过指针实现,由于存储空间不要求连续性,因此插入和删除操作将变得十分快速.下面将利 ...

  5. Android实现点击两次返回退出APP

    Android实现点击两次退出APP 这两天在做一个项目碰到这么个问题,需要主界面点击两次直接退出整个APP而不是返回上一个界面,查找了网上的资料,整合和修改了一下写了这篇博客. 这里我主要以我的项目 ...

  6. (转载) Android 带清除功能的输入框控件ClearEditText,仿IOS的输入框

    Android 带清除功能的输入框控件ClearEditText,仿IOS的输入框 标签: Android清除功能EditText仿IOS的输入框 2013-09-04 17:33 70865人阅读  ...

  7. Android 抗锯齿的两种方法

    Android 抗锯齿的两种方法 (其一:paint.setAntiAlias(ture);paint.setBitmapFilter(true))   在Android中,目前,我知道有两种出现锯齿 ...

  8. Android 一个页面上下两个ListView的页面显示

    Android 一个页面上下两个ListView,当上面的ListView过长时,下面的List基本没有了滑动空间,查阅网上资料,解决办法基本是采用ScrollView做页面滑动,notifyData ...

  9. Android 更新UI的两个方法

    Android 更新UI的两个方法 在Android的开发过程中,常常需要适时的更新UI.Androd中的UI是在主线程中更新的.如果在主线程之外的线程中直接更新,就会出现报错并抛出异常: andro ...

随机推荐

  1. CodeForces Round #285 Div.2

    C.Misha and Forest (图论 BFS) 比赛进行了一半才想起来有场CF没打,=_=|| 前两道题快速切掉,C题一直卡没什么好的思路 憋了几天,忍不住偷偷瞄了一下别人AC的代码,发现我题 ...

  2. Java 简单登录MVC

    构建一个简单的基于MVC模式的JavaWeb 零晨三点半了,刚刚几个兄弟一起出去吼歌,才回来,这应该是我大学第二次去K歌,第一次是大一吧,之后每次兄弟喊我,我都不想去,因为我还是很害怕去KTV,或许是 ...

  3. 创业实战go语言制作网站(转)

    简单介绍一下之前的整个职业生涯,挺典型的,工程师 –> 资深工程师 –> 架构师 –> 项目经理 –> 部门经理,可以说,产品研发过程中的所有角色我都走了一遍,任职的公司也越来 ...

  4. 陈正冲老师讲c语言之const关键字

    1.const 关键字也许该被替换为 readolny const是constant的缩写,是恒定不变的意思,也翻译为常量.常数等.很不幸,正是因为这一点,很多人都认为被const修饰的值是常量.这是 ...

  5. shell判断条件是否存在

    1. shell判断文件,目录是否存在或者具有权限 2. #!/bin/sh 3. 4. myPath="/var/log/httpd/" 5. myFile="/var ...

  6. HTML5桌面通知:notification api

    1. 为什么需要HTML5的桌面通知 传统的桌面通知可以写一个div放到页面右下角自动弹出来,并通过轮询等等其他方式去获取消息并推送给用户.这种方式有个弊端就是:当我在使用京东 进行购物的时候,我是不 ...

  7. ubuntu桌面右上角键盘图标不见解决方法

    今天出现了这个问题,桌面右上角的键盘图标不见,找到解决方法如下: 打开终端,分别输入以下命令即可: killall ibus-daemon 这个表示结束进程 ibus-daemon -d 这个表示重启 ...

  8. [Bhatia.Matrix Analysis.Solutions to Exercises and Problems]ExI.5.9

    (Schur's Theorem) If $A$ is positive, then $$\bex \per(A)\geq \det A. \eex$$ Solution. By Exercise I ...

  9. MessagePack介绍

    在项目中,服务端的人需要我研究messagepcak 进行数据的传输,对messagePack的了解就是传输的数据格式都是二进制,可以节省用户的流量,就因为这点 数据格式小,服务端决定采用msgpac ...

  10. alibaba笔试3

    16.C 17.这道的取值范围应该是1到1023.这样就选择A 18.B 圆桌问题1个人拿出来当key 19.D 类似于https://apollozhao.wordpress.com/categor ...