android 带表头,左右两个联动的ListView

- package com.rytong.mylist;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Random;
- import android.app.Activity;
- import android.content.Context;
- import android.graphics.Color;
- import android.graphics.Rect;
- import android.os.Bundle;
- import android.view.MotionEvent;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.AbsListView;
- import android.widget.BaseAdapter;
- import android.widget.HorizontalScrollView;
- import android.widget.LinearLayout;
- import android.widget.LinearLayout.LayoutParams;
- import android.widget.ListView;
- import android.widget.TextView;
- public class SuperTables extends Activity {
- public static final LayoutParams FULL = new LayoutParams(
- LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
- public static final LayoutParams DEFINDELP = new LayoutParams(100, 200);
- public static final LayoutParams TEXTLP = new LayoutParams(100, 50);
- public static final int TEXTSIZE = 20;
- private LinearLayout mainLly;
- private ListView leftLst;
- private LinearLayout leftLly;
- private HorizontalScrollView rightHsv;
- private LinearLayout rightLly;
- private ListView rightLst;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- // TODO Auto-generated method stub
- super.onCreate(savedInstanceState);
- mainLly = new LinearLayout(this);
- mainLly.setLayoutParams(FULL);
- mainLly.setOrientation(LinearLayout.HORIZONTAL);
- initLeft();
- initRight();
- setCascading();
- setContentView(mainLly);
- }
- private void initLeft() {
- leftLly = new LinearLayout(this);
- leftLly.setOrientation(LinearLayout.VERTICAL);
- leftLly.setLayoutParams(DEFINDELP);
- leftLst = new ListView(this);
- leftLst.setLayoutParams(FULL);
- // 添加ListView头部视图
- LinearLayout leftHead = new LinearLayout(this);
- // leftHead.setLayoutParams(TEXTLP);
- TextView tv = new TextView(this);
- tv.setText("title");
- tv.setTextSize(TEXTSIZE);
- tv.setLayoutParams(TEXTLP);
- leftHead.addView(tv);
- leftLly.addView(leftHead);
- // leftLst.addHeaderView(leftHead);
- leftLst.setAdapter(new LeftLstAdapter(this, new String[] { "0.0.0.0",
- "1.1.1.1", "2.2.2.2", "3.3.3.3", "4.4.4.4", "5.5.5.5",
- "6.6.6.6", "7.7.7.7", "8.8.8.8", "9.9.9.9" }));
- //leftLst.setScrollBarStyle();
- //leftLst.setScrollBarStyle(0);
- leftLst.setCacheColorHint(Color.TRANSPARENT);
- leftLst.setAlwaysDrawnWithCacheEnabled(true);
- //隐藏滚动条
- leftLst.setVerticalScrollBarEnabled(false);
- leftLly.addView(leftLst);
- leftLly.setBackgroundColor(Color.WHITE);
- mainLly.addView(leftLly);
- getWindow().getDecorView();
- }
- public class LeftLstAdapter extends BaseAdapter {
- private Context context_;
- private String[] data_;
- public LeftLstAdapter(Context context, String[] data) {
- // TODO Auto-generated constructor stub
- this.context_ = context;
- this.data_ = data;
- }
- @Override
- public int getCount() {
- // TODO Auto-generated method stub
- return data_.length;
- }
- @Override
- public Object getItem(int position) {
- // TODO Auto-generated method stub
- return data_[position];
- }
- @Override
- public long getItemId(int position) {
- // TODO Auto-generated method stub
- return position;
- }
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- // TODO Auto-generated method stub
- LinearLayout lly = new LinearLayout(context_);
- TextView tv = new TextView(context_);
- tv.setLayoutParams(TEXTLP);
- tv.setText(data_[position]);
- tv.setTextSize(TEXTSIZE);
- lly.addView(tv);
- return lly;
- }
- }
- public static final String[] TITLES = new String[] { "name", "sex", "age",
- "school", "salary", "spouse" };
- private void initRight() {
- rightHsv = new HorizontalScrollView(this);
- rightHsv.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
- 200));
- rightLly = new LinearLayout(this);
- rightLly.setOrientation(LinearLayout.VERTICAL);
- rightLly.setLayoutParams(FULL);
- // 右侧ListVie标题
- LinearLayout lly = new LinearLayout(this);
- lly.setLayoutParams(new LayoutParams(100 * TITLES.length, 50));
- lly.setOrientation(LinearLayout.HORIZONTAL);
- TextView t = null;
- LinearLayout ly = null;
- for (int i = 0; i < TITLES.length; i++) {
- ly = new LinearLayout(this);
- ly.setLayoutParams(TEXTLP);
- t = new TextView(this);
- t.setText(TITLES[i]);
- t.setTextSize(TEXTSIZE);
- ly.addView(t);
- // t.setLayoutParams(TEXTLP);
- lly.addView(ly);
- }
- rightLly.addView(lly);
- rightLst = new ListView(this);
- rightLst.setAdapter(new RightAdapter(this, getData()));
- rightLly.addView(rightLst);
- rightHsv.addView(rightLly);
- rightHsv.setPadding(20, 0, 0, 0);
- mainLly.addView(rightHsv);
- }
- // 设置联动
- private void setCascading() {
- rightLst.setOnTouchListener(new View.OnTouchListener() {
- @Override
- public boolean onTouch(View v, MotionEvent event) {
- // TODO Auto-generated method stub
- leftLst.dispatchTouchEvent(event);
- return false;
- }
- });
- leftLst.setOnScrollListener(new AbsListView.OnScrollListener() {
- @Override
- public void onScrollStateChanged(AbsListView view, int scrollState) {
- // TODO Auto-generated method stub
- }
- @Override
- public void onScroll(AbsListView view, int firstVisibleItem,
- int visibleItemCount, int totalItemCount) {
- if (leftLst.getChildAt(0) != null) {
- Rect r = new Rect();
- leftLst.getChildVisibleRect(leftLst.getChildAt(0), r, null);
- rightLst.setSelectionFromTop(
- leftLst.getFirstVisiblePosition(), r.top);
- }
- }
- });
- }
- public List<HashMap<String, String>> getData() {
- List<HashMap<String, String>> data = new ArrayList<HashMap<String, String>>();
- HashMap<String, String> dataItem = null;
- Random rd = new Random();
- for (int i = 0; i < 9; i++) {
- dataItem = new HashMap<String, String>();
- for (int j = 0; j < TITLES.length; j++) {
- dataItem.put(TITLES[j], i + "");//rd.nextInt(10000)
- }
- data.add(dataItem);
- }
- return data;
- }
- public class RightAdapter extends BaseAdapter {
- Context context_;
- List<HashMap<String, String>> data_;
- public RightAdapter(Context context, List<HashMap<String, String>> data) {
- // TODO Auto-generated constructor stub
- this.context_ = context;
- this.data_ = data;
- }
- @Override
- public int getCount() {
- // TODO Auto-generated method stub
- return data_.size();
- }
- @Override
- public Object 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) {
- LinearLayout lly = new LinearLayout(context_);
- lly.setOrientation(LinearLayout.HORIZONTAL);
- TextView tv = null;
- for (int i = 0, size = data_.get(position).size(); i < size; i++) {
- tv = new TextView(context_);
- tv.setLayoutParams(TEXTLP);
- tv.setText(data_.get(position).get(TITLES[i]));
- tv.setTextSize(TEXTSIZE);
- lly.addView(tv);
- }
- return lly;
- }
- }
- }
- 总结:用此方法来实现存在较大弊端,在高版本手机中会明显出现跳格现象,有时并不准确,所以慎用之!!!!!!!!!
android 带表头,左右两个联动的ListView的更多相关文章
- Android -- 带你从源码角度领悟Dagger2入门到放弃
1,以前的博客也写了两篇关于Dagger2,但是感觉自己使用的时候还是云里雾里的,更不谈各位来看博客的同学了,所以今天打算和大家再一次的入坑试试,最后一次了,保证最后一次了. 2,接入项目 在项目的G ...
- Android -- 带你从源码角度领悟Dagger2入门到放弃(二)
1,接着我们上一篇继续介绍,在上一篇我们介绍了简单的@Inject和@Component的结合使用,现在我们继续以老师和学生的例子,我们知道学生上课的时候都会有书籍来辅助听课,先来看看我们之前的Stu ...
- Android -- 带你从源码角度领悟Dagger2入门到放弃(一)
1,以前的博客也写了两篇关于Dagger2,但是感觉自己使用的时候还是云里雾里的,更不谈各位来看博客的同学了,所以今天打算和大家再一次的入坑试试,最后一次了,保证最后一次了. 2,接入项目 在项目的G ...
- Python与数据结构[0] -> 链表/LinkedList[0] -> 单链表与带表头单链表的 Python 实现
单链表 / Linked List 目录 单链表 带表头单链表 链表是一种基本的线性数据结构,在C语言中,这种数据结构通过指针实现,由于存储空间不要求连续性,因此插入和删除操作将变得十分快速.下面将利 ...
- Android实现点击两次返回退出APP
Android实现点击两次退出APP 这两天在做一个项目碰到这么个问题,需要主界面点击两次直接退出整个APP而不是返回上一个界面,查找了网上的资料,整合和修改了一下写了这篇博客. 这里我主要以我的项目 ...
- (转载) Android 带清除功能的输入框控件ClearEditText,仿IOS的输入框
Android 带清除功能的输入框控件ClearEditText,仿IOS的输入框 标签: Android清除功能EditText仿IOS的输入框 2013-09-04 17:33 70865人阅读 ...
- Android 抗锯齿的两种方法
Android 抗锯齿的两种方法 (其一:paint.setAntiAlias(ture);paint.setBitmapFilter(true)) 在Android中,目前,我知道有两种出现锯齿 ...
- Android 一个页面上下两个ListView的页面显示
Android 一个页面上下两个ListView,当上面的ListView过长时,下面的List基本没有了滑动空间,查阅网上资料,解决办法基本是采用ScrollView做页面滑动,notifyData ...
- Android 更新UI的两个方法
Android 更新UI的两个方法 在Android的开发过程中,常常需要适时的更新UI.Androd中的UI是在主线程中更新的.如果在主线程之外的线程中直接更新,就会出现报错并抛出异常: andro ...
随机推荐
- 12月上旬poj其他题
poj3170 1,4两遍bfs: poj3171 改一改poj2376即可 poj3172 dfs+剪枝 其实增长速度很快,n<=40,题目吓你的: poj3661 比较经典的dp:设f[i, ...
- apache开源项目--Derby
Apache Derby是Apache软件基金会所研发的开放源码数据库管理系统:由于Derby是一个纯Java程式,因此只需要操作系统支援Java虚拟机,Derby便可执行. Derby是特别地为Ja ...
- CSS sprite 圆角——源代码
所需图片: corner ...
- LINQ,EF联合查询join
public object GetListAdmin() { //return db_C56.Admins // .Where(a => a.Status != "D") ...
- log4net 将日志写入数据库
asp.net利用log4net写入日志到SqlServer数据库,Log4net是一个开源的错误日志记录项目,易用性强,源自log4j,品质值得信赖. 下面就我的安装部署log4net到MS sql ...
- ViewPager 滑动页(二)
需求:滑动展示页,能够使用本地数据,及获取服务器数据进行刷新操作,并实现页面自动切换: 效果图: 实现分析: 1.目录结构: 代码实现: 1.PosterView.java package com.j ...
- visual studio 2012 update3
http://www.microsoft.com/zh-cn/download/confirmation.aspx?id=39305
- 让你的.NET程序支持多语言
辛辛苦苦做出来的软件,我们当然希望能让更多的人用,支持多语言是必须的.下面我将以Asp.net Web Form为例来介绍如何支持多语言.其他程序比如windows程序,过程都是大同小异的. 大概分以 ...
- HDU 2121 Ice_cream’s world II 最小树形图
这个题就是需要求整个有向带权图的最小树形图,没有指定根,那就需要加一个虚根 这个虚根到每个点的权值是总权值+1,然后就可以求了,如果求出来的权值大于等于二倍的总权值,就无解 有解的情况,还需要输出最根 ...
- LeetCode题解——Median of Two Sorted Arrays
题目: 找两个排序数组A[m]和B[n]的中位数,时间复杂度为O(log(m+n)). 解法: 更泛化的,可以找第k个数,然后返回k=(m+n)/2时的值. 代码: class Solution { ...