`
trx999
  • 浏览: 997 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

Android:ScorllViewAndListView冲突问题另一种解决方案

 
阅读更多

直接贴代码 我不喜欢废话!看看吧!

package com.jclt.activity;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;

/**
 * 测试ScrollView和listview
 * @author TanRuixiang
 * @date 2011年8月2日, PM 03:05:08
 */
public class ScorllViewAndListViewActivity extends Activity {
	private ListView listView = null;
	private ListAdapter listAdapter = null;
	private List<Map<String,Object>> list = null ;
	private float density = 0 ; 
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        //绑定ID到控件上面
        listView = (ListView)findViewById(R.id.listview);
        DisplayMetrics metrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(metrics);
        density = metrics.density;
        initDate();
    }
    
	/**
     * 拿到整个数据List的大小</br>
     * 如果List不等于空 或者 List的大小大于零</br>
     * 实例化一个自定义的适配器,把自定义的适配器绑定到控件ListView上面</br>
     * 实例化一个自定义的监听器,把自定义的监听器绑定到控件ListView上面</br>
     * 判断屏幕的密度 </br>
     * 如果密度小于1.0 密度等于1.5</br>
     * 就给ListView手动设置宽度和高度</br>
     */
    private void initDate(){
    	list = getData();
    	if(list != null && list.size() > 0){
    		//SimpleAdapter adapter = new SimpleAdapter(this, list, R.layout.list_item, new String[]{"name","age"}, new int[]{R.id.textviewName,R.id.textviewAge});
    		listAdapter = new ListAdapter(this);
    		listView.setAdapter(listAdapter);
    		listView.setOnItemClickListener(new OnclickListVieListener());
    		if(density < 1.0 || density == 1.5){
    			listView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, (int) (list.size() * 48 * density)));
    		} else{
    			listView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, (int) (list.size() * 47 * density)));
    		}
    	}
    }
    /**
     *  获取到数据(此数据类型是一个List集合,List集合中是一个Map(通过键值对来获取Map中的数据))
     * @return list
     */
   /* private List<Map<String, Object>> getData() {
		List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
		Map<String, Object> map = new HashMap<String, Object>();
		map.put("name", "yuanshouhui");
		map.put("pass", "123456");
		list.add(map);

		map = new HashMap<String, Object>();
		map.put("name", "tanglong");
		map.put("pass", "123456");
		list.add(map);

		map = new HashMap<String, Object>();
		map.put("name", "zhuangsan");
		map.put("pass", "123456");
		list.add(map);

		map = new HashMap<String, Object>();
		map.put("name", "xiaoyuan");
		map.put("pass", "123456");
		list.add(map);

		map = new HashMap<String, Object>();
		map.put("name", "xiaoqiang");
		map.put("pass", "123456");
		list.add(map);
		map.put("name", "yuanshouhui");
		map.put("pass", "123456");
		list.add(map);

		map = new HashMap<String, Object>();
		map.put("name", "tanglong");
		map.put("pass", "123456");
		list.add(map);

		map = new HashMap<String, Object>();
		map.put("name", "zhuangsan");
		map.put("pass", "123456");
		list.add(map);

		map = new HashMap<String, Object>();
		map.put("name", "xiaoyuan");
		map.put("pass", "123456");
		list.add(map);

		map = new HashMap<String, Object>();
		map.put("name", "xiaoqiang");
		map.put("pass", "123456");
		list.add(map);

		map.put("name", "yuanshouhui");
		map.put("pass", "123456");
		list.add(map);

		map = new HashMap<String, Object>();
		map.put("name", "tanglong");
		map.put("pass", "123456");
		list.add(map);

		return list;

	}*/
    private List<Map<String, Object>> getData(){
    	List<Map<String, Object>> list = new ArrayList<Map<String,Object>>();
    	for (int i = 0; i < 30; i++) {
    		Map<String, Object> map = new HashMap<String, Object>();
    		map.put("name", "name"+i);
    		map.put("age", "age"+i);
    		list.add(map);
		}
    	return list;
    }
    /**
     * 设置监听器(给ListView每一个Item设置一个监听器)
     * @author TanRuixiang
     * @date 2011年8月2日, PM 03:05:08
     */
    class OnclickListVieListener implements OnItemClickListener{

		@Override
		public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
				long arg3) {
			Toast.makeText(getApplicationContext(), "第"+arg2+"个触发监听器", 0).show();
		}
    	
    }
    /**
     * 设置一个适配器(把该适配器绑定到ListView上面)
     * @author TanRuixiang
     * @date 2011年8月2日, PM 03:05:08
     */
	class ListAdapter extends BaseAdapter{
       private LayoutInflater inflater ; 
       public ListAdapter(Context context){
    	   this.inflater = LayoutInflater.from(context);
       }
		@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;
		}
        public final class Holder{
        	TextView gridName;
			TextView gridPrice;
        }
		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			Holder holder ; 
			if(convertView == null){
				holder = new Holder();
				convertView = inflater.inflate(R.layout.list_item, null);
				holder.gridName = (TextView)convertView.findViewById(R.id.textviewName);
				holder.gridPrice = (TextView)convertView.findViewById(R.id.textviewAge);
				convertView.setTag(holder);
			}else{
				holder =(Holder)convertView.getTag();
			}
 			holder.gridName.setText(("姓名:")+(String)list.get(position).get("name"));
 			System.out.println(holder.gridName.getText());
			holder.gridPrice.setText(("年龄:")+(String)list.get(position).get("age"));
			return convertView;
		}
    	
    }
}

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <TextView android:id="@+id/textviewName"
    		  android:layout_width="fill_parent"
    		  android:layout_height="wrap_content"
    		  />
    		  <TextView android:id="@+id/textviewAge"
    		  			android:layout_width="fill_parent"
    		  			android:layout_height="wrap_content"
    		  			/>
    </LinearLayout>

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<ScrollView android:id="@+id/scorllview"
 			android:layout_width="wrap_content"
 			android:layout_height="wrap_content"
 			>
 			<LinearLayout android:orientation="vertical"
 						  android:layout_width="wrap_content"
 						  android:layout_height="wrap_content"
 						  >
 						  <ListView android:id="@+id/listview"
 						  			android:layout_width="wrap_content"
 						  			android:layout_height="wrap_content"
 						  			android:dividerHeight="1dip"
 						  			></ListView>
 						  </LinearLayout>
 			</ScrollView>
 			
</LinearLayout>

  

分享到:
评论

相关推荐

    Android设置虚线、圆角、渐变

    对于径向渐变,只需将`&lt;gradient&gt;`标签内的`type`属性改为`radial`,并添加`android:centerX`、`android:centerY`和`android:gradientRadius`属性来指定渐变中心和半径。 ### 四、综合运用 可以结合以上三种效果,...

    android:scheme 通过uri跳转到APP应用指定Activity

    在Android开发中,`android:scheme` 是一个关键的概念,用于构建自定义URL协议,使得外部应用或系统可以通过特定的URI来启动我们的应用程序中的特定Activity。这个特性在很多场景下非常有用,比如分享链接、广告点击...

    Android listview和viewpager解决冲突 滑动冲突

    Android listview viewpager 滑动 跳动 冲突解决 ListView中嵌套ViewPage有或者滑动手势冲突解决 blog 地址 : http://blog.csdn.net/aaawqqq/article/details/43824631

    深入理解Android:卷2,中文完整扫描版

    《深入理解Android:卷2》是“深入理解Android”系列的第2本,第1本书上市后获得广大读者高度评价,在Android开发者社群内口口相传。《深入理解Android:卷2》不仅继承了第1本书的优点并改正了其在细微处存在的一些...

    深入理解Android:Telephony原理剖析与最佳实践

    《深入理解Android:Telephony原理剖析与最佳实践》是一本专注于Android系统中Telephony模块的专著,旨在帮助开发者和爱好者深入理解Android电话系统的内部工作原理,并提供实践中的最佳策略。Telephony是Android...

    android中adapter与checkbox、editText冲突的解决方案

    本文将详细探讨这个问题,并提供解决方案。 首先,我们需要了解Adapter的工作原理。Adapter是作为数据模型和视图之间的桥梁,它将数据转化为View,并将这些View添加到ListView等容器中。当用户与这些View交互(如...

    android多种滑动冲突的解决方案

    Android 中解决滑动的方案有2种:外部拦截法 和内部拦截法。 滑动冲突也存在2种场景: 横竖滑动冲突、同向滑动冲突。 所以我就写了4个例子来学习如何解决滑动冲突的,这四个例子分别为: 外部拦截法解决横竖冲突、...

    TextView滚动,跑马灯效果终极解决方案

    "跑马灯"效果,又称为滚动效果,是指当TextView中的文本内容超过其显示区域时,文本会自动从一端滚动到另一端,形成一种循环滚动的视觉效果。这种效果通常用在通知栏、新闻标题或者广告横幅等场景。在本实验中,我们...

    Android自定义软键盘

    对于如“回退”、“空格”等特殊键,可以在XML布局中设置`android:horizontalGap`和`android:popupKeyboard`属性来控制它们的显示和行为。 综上所述,通过Android的`KeyboardView`组件,我们可以轻松创建自定义的软...

    安卓Android多阶段进度条progress bar附带动画效果

    &lt;solid android:color="@android:color/darker_gray" /&gt; &lt;corners android:radius="5dp" /&gt; &lt;item android:id="@android:id/secondaryProgress"&gt; &lt;solid android:color="@android:color/holo_blue_dark...

    android中透明Dialog及ProgressDialog的实现

    &lt;item name="android:windowBackground"&gt;@android:color/transparent &lt;item name="android:backgroundDimEnabled"&gt;false ``` 然后在Activity中实例化Dialog并设置布局: ```java Dialog dialog = new Dialog...

    Android 一个app启动另一个app

    在Android平台上,应用程序之间的交互是通过Intent机制实现的,这使得一个App能够启动另一个App,或者触发特定的操作。"Android 一个app启动另一个app"这个主题涉及到的核心知识点包括Intent的使用、Intent Filter的...

    Android自定义Spinner样式

    - 背景资源:可以使用`android:background`属性设置自定义背景图,或者通过XML定义形状(如矩形、圆角矩形等)来改变Spinner的外观。 - 使用`&lt;shape&gt;`标签定义一个Drawable,设置颜色、边框宽度和边框颜色,以创建...

    Android-根据EditText内容的变化,自动追加TextView

    android:textColor="@android:color/black" android:text="已输入的内容:" android:scrollbars="vertical" /&gt; ``` 这里,我们用了一个`LinearLayout`作为容器,垂直排列了`EditText`和`TextView`。为了在`...

    android:仪表盘(简单易实现)

    在Android开发中,创建一个直观且吸引人的仪表盘界面可以为用户提供丰富的视觉体验。本教程将探讨如何在Android应用中实现一个简洁而易操作的仪表盘。我们的目标是减轻编程负担,将更多复杂的设计工作交给美工,从而...

    Android最简单的gridview嵌套gridview,解决滑动冲突问题

    本主题聚焦于如何在Android应用中实现一个"最简单的gridview嵌套gridview"的场景,并解决滑动冲突问题。 首先,让我们了解一下GridView的基本概念。GridView是一种布局管理器,它将视图(如图片、文字等)以网格的...

    《深入理解Android:卷I》试读本

    《深入理解Android:卷I》是一本以情景方式对Android的源代码进行深入分析的书。内容广泛,以对Framework层的分析为主,兼顾Native层和Application层;分析深入,每一部分源代码的分析都力求透彻;针对性强,注重实际...

    android 引导界面(添加图层)

    android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"&gt; android:id="@+id/splash_logo" android:layout_width="wrap_content" android:layout_...

    Android自定义控件——圆形进度条

    &lt;solid android:color="@android:color/holo_blue_bright" /&gt; android:height="48dp" android:width="48dp" /&gt; ``` 上述代码定义了一个旋转的环形形状,颜色为`holo_blue_bright`,并且设置了内径比例和...

    Android教你如何一分钟实现下拉刷新功能项目完整实例代码

    在Android应用开发中,下拉刷新(Pull to Refresh)是一种常见的功能,允许用户通过在界面上下拉动来更新数据。本实例将详细讲解如何在Android项目中实现这一功能,提供了一个名为`PullToRefreshTest`的完整代码示例...

Global site tag (gtag.js) - Google Analytics