fangyong2006 发表于 2013-1-30 04:02:21

ch013 Android ScrollView与ListView

<div style="" class="Section0">--------------------------------------------Layout activity_main.xml--------------------------
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <ScrollView
        android:id="@+id/srcollview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:fadingEdge="none" >

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" >

            <ListView
                android:id="@+id/listview"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:fadingEdge="none" >
            </ListView>
        </LinearLayout>
    </ScrollView>

</LinearLayout>
--------------------------------------------Layout  list_item.xml------------------------------
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" android:gravity="center">

    <ImageView
        android:id="@+id/icon"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" android:src="@drawable/ic_launcher" />

    <TextView
        android:id="@+id/content"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" android:text="....................."/>
    
        <ImageView
        android:id="@+id/img"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" android:src="@drawable/list_arrow"/>

</LinearLayout>
--------------------------------------------drawable circle_list_middle.xml-------------------
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/circle_list_middle_s" android:state_pressed="true"></item>
    <item android:drawable="@drawable/circle_list_middle_s" android:state_selected="true"></item>
    <item android:drawable="@drawable/circle_list_middle_n"></item>
</selector>
--------------------------------------------MainActivity.java-----------------------------------
package com.ch13;

import android.app.Activity;
import android.os.Bundle;
import android.widget.ListView;
/**
 * 
 * 项目名称:com.ch13    
 * 类名称:MainActivity    
 * 类描述: ListView与ScrollView一起使用
 * 创建人:方勇   
 * 创建时间:2012-11-20 下午9:16:20   
 * Copyright (c) 方勇-版权所有
 */
public class MainActivity extends Activity {

private ListView listview;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViews();
setListeners();
init();
}

/* 初始化UI */
private void findViews() {
listview = (ListView) findViewById(R.id.listview);
}

/* 设置监听 */
private void setListeners() {

}

/* 初始化数据 */
private void init() {
listview.setAdapter(new MyAdapter(this));
HUtil.setListViewHeightByChildHeight(listview);
}
}
--------------------------------------------MyAdapter.java-------------------------------------
package com.ch13;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
/**
 * 
 * 项目名称:com.ch13    
 * 类名称:MyAdapter    
 * 类描述:  自定义适配器
 * 创建人:方勇   
 * 创建时间:2012-11-20 上午8:44:59   
 * Copyright (c) 方勇-版权所有
 */
public class MyAdapter extends BaseAdapter {

/*上下文*/
private Context mcontext;
/*布局管理器*/
LayoutInflater layoutInflater;
/*数据集合*/
private List<HashMap<String,Object>> list = new ArrayList<HashMap<String,Object>>();

public MyAdapter(Context context) {
super();
this.mcontext = context;
layoutInflater = LayoutInflater.from(context);
setData();
}

@Override
public int getCount() {
return list.size();
}

@Override
public Object getItem(int position) {
return list.get(position);
}

@Override
public long getItemId(int position) {
return position;
}

/*面向OOP思想*/
static class ViewHolder{
ImageView image_icon;
TextView view_content;
ImageView image_img;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
/*初始化UI*/
if(null==convertView){
/*item实例化*/
convertView = layoutInflater.inflate(R.layout.list_item, null);
holder = new ViewHolder();
holder.image_icon = (ImageView) convertView.findViewById(R.id.icon);
holder.view_content = (TextView) convertView.findViewById(R.id.content);
holder.image_img = (ImageView) convertView.findViewById(R.id.img);

convertView.setTag(holder);
}else{
holder = (ViewHolder) convertView.getTag();
}
//设置背景图片
convertView.setBackgroundResource(R.drawable.circle_list_middle);
//设值
holder.image_icon.setImageResource((Integer) list.get(position).get("icon"));
holder.view_content.setText(list.get(position).get("content").toString());
holder.image_img.setImageResource((Integer) list.get(position).get("img"));

return convertView;
}

/* 初始化ListView数据 */
private void setData(){
HashMap<String,Object> map01 = new HashMap<String,Object>();
map01.put("icon", R.drawable.ic_launcher);
map01.put("content", "我的资料");
map01.put("img", R.drawable.list_arrow);
list.add(map01);

HashMap<String,Object> map02 = new HashMap<String,Object>();
map02.put("icon", R.drawable.ic_launcher);
map02.put("content", "设置");
map02.put("img", R.drawable.list_arrow);
list.add(map02);

HashMap<String,Object> map03 = new HashMap<String,Object>();
map03.put("icon", R.drawable.ic_launcher);
map03.put("content", "用户切换");
map03.put("img", R.drawable.list_arrow);
list.add(map03);

HashMap<String,Object> map04 = new HashMap<String,Object>();
map04.put("icon", R.drawable.ic_launcher);
map04.put("content", "查看消息记录");
map04.put("img", R.drawable.list_arrow);
list.add(map04);

HashMap<String,Object> map05 = new HashMap<String,Object>();
map05.put("icon", R.drawable.ic_launcher);
map05.put("content", "查看版本");
map05.put("img", R.drawable.list_arrow);
list.add(map05);
}

}
--------------------------------------------HUtil.java-------------------------------------------
package com.ch13;

import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;

/**
 * 
 * 项目名称:com.ch13    
 * 类名称:HUtil    
 * 类描述:  解决ListView与ScrollView一起使用时的ListView高度问题
 * 解决思路为
 * 1、获取ListView下子控件的高度+控件之间的间隔,
 * 2、赋值给ListView的LayoutParams对象
 * 
 * 创建人:方勇   
 * 创建时间:2012-11-20 上午9:32:01   
 * Copyright (c) 方勇-版权所有
 */
public class HUtil {

/*记录总高度*/
static int totalHeight = 0;
public static void setListViewHeightByChildHeight(ListView listView){
/*得到适配器*/
MyAdapter myAdapter = (MyAdapter) listView.getAdapter();
/*遍历控件*/
for (int i = 0; i < myAdapter.getCount(); i++) {
View view = myAdapter.getView(i, null, listView);
/*测量一下子控件的高度*/
view.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
totalHeight+=view.getMeasuredHeight();
}
  /*控件之间的间隙*/
totalHeight+=listView.getDividerHeight()*(listView.getCount()-1);

/*2、赋值给ListView的LayoutParams对象*/
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight;

listView.setLayoutParams(params);
}
}

--------------------------------------------使用前的效果----------------------------------------
http://dl.iteye.com/upload/attachment/0076/8734/9e2445d4-c5c5-3da6-a5b1-92fb3aa1ada0.png
--------------------------------------------使用后的效果----------------------------------------
http://dl.iteye.com/upload/attachment/0076/8736/ea8a0e84-981e-3888-98e2-27723a1c9f1d.png
页: [1]
查看完整版本: ch013 Android ScrollView与ListView