`

android > ListView > 加载不同控件

 
阅读更多

先是主 布局文件 main.xml

 

 

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

    <ListView 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/list_view"
        ></ListView>

</LinearLayout>

 

然后是3个不同控件的布局文件,先是 TextView

 

 

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="horizontal" 
    android:padding="8dip"
    >
    <TextView   
       android:id="@+id/monitor_list_left"  
       android:layout_width="wrap_content"  
       android:layout_height="wrap_content"  
       android:layout_alignParentLeft="true"  
       android:layout_centerVertical="true"
       >     
   </TextView>      
   <TextView   
       android:id="@+id/monitor_list_right"  
       android:layout_width="wrap_content"  
       android:layout_height="wrap_content"  
       android:layout_alignParentRight="true"
       android:layout_centerVertical="true"  
       >     
   </TextView>  

</RelativeLayout>

 

 

然后是 Checkbox

 

 

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="horizontal" 
    android:padding="8dip"
    >
    <TextView   
       android:id="@+id/monitor_list_left"  
       android:layout_width="wrap_content"  
       android:layout_height="wrap_content"  
       android:layout_alignParentLeft="true"  
       android:layout_centerVertical="true"
       >     
   </TextView>      
   <CheckBox   
       android:id="@+id/monitor_list_right"  
       android:layout_width="wrap_content"  
       android:layout_height="wrap_content"  
       android:layout_alignParentRight="true"  
       android:layout_centerVertical="true"
       >     
   </CheckBox>  

</RelativeLayout>

 

 

然后是 Turn On / Turn Off  == ToggleButton 控件

 

 

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="horizontal" 
    android:padding="8dip"
    >
    <TextView   
       android:id="@+id/monitor_list_left"  
       android:layout_width="wrap_content"  
       android:layout_height="wrap_content"  
       android:layout_alignParentLeft="true"  
       android:layout_centerVertical="true"
       >     
   </TextView>      
   
   <ToggleButton
       android:id="@+id/monitor_list_right"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_alignParentRight="true"  
       android:layout_centerVertical="true"  />

</RelativeLayout>

 

 

然后是 ListItem.java  里面继承了 BaseAdapter 并在里面做了 position判断调用不同 布局 的

 

 

package t1.com;

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.CheckBox;
import android.widget.TextView;
import android.widget.ToggleButton;

public class ListItem extends BaseAdapter {
	private List<HashMap<String,String>> list;
	private Context context;
	 
	
	//构造函数
	public ListItem (Context context,List<HashMap<String,String>> list){
		this.context = context;
		this.list = list;
	}
	
	public int getCount() {
		// TODO Auto-generated method stub
		return list.size();
	}
	public Object getItem(int arg0) {
		// TODO Auto-generated method stub
		return list.get(arg0);
	}
	public long getItemId(int position) {
		// TODO Auto-generated method stub
		return position;
	}
	public View getView(int position, View convertView, ViewGroup parent) {
		// TODO Auto-generated method stub
		LayoutInflater mInflater = LayoutInflater.from(context);
		View view = null;
		switch (position) {
		case 0:
			view = mInflater.inflate(R.layout.list_textview, null);
			TextView title = (TextView)view.findViewById(R.id.monitor_list_left);
			title.setText("编号");
			
			TextView value = (TextView)view.findViewById(R.id.monitor_list_right);
			value.setText(list.get(position).get("data"));
			break;
		case 1:
			view = mInflater.inflate(R.layout.list_turn, null);	
			TextView title2 = (TextView)view.findViewById(R.id.monitor_list_left);
			title2.setText("是否开启");
			
			ToggleButton value2 = (ToggleButton)view.findViewById(R.id.monitor_list_right);
			if(list.get(position).get("data").equals("1")){
				value2.setChecked(true);
			}else{
				value2.setChecked(false);
			}
			break;	
			
		case 2:
			view = mInflater.inflate(R.layout.list_checkbox, null);
			TextView title3 = (TextView)view.findViewById(R.id.monitor_list_left);
			title3.setText("是否结婚");
			
			CheckBox value3 = (CheckBox)view.findViewById(R.id.monitor_list_right);
			if(list.get(position).get("data").equals("1")){
				value3.setChecked(true);
			}else{
				value3.setChecked(false);
			}
			break;	

		default:
			break;
		}
				
		
		
		return view;
	}
	
}

 

 

最后是 主Activity文件 T1Activity.java 

 

 

 

package t1.com;

import java.util.ArrayList;
import java.util.HashMap;

import android.app.Activity;
import android.os.Bundle;
import android.widget.ListView;

public class T1Activity extends Activity {
    /** Called when the activity is first created. */
	private ListView listVIew;
	ArrayList<HashMap<String, String>> listItem = new ArrayList<HashMap<String, String>>();
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        listVIew = (ListView)findViewById(R.id.list_view);
        
        
        String data[] = {"33","1","结婚设置","0"};
        
        for(int i = 0;i<data.length;i++){
        	HashMap<String, String> map = new HashMap<String, String>();
        	map.put("data", data[i]);
        	listItem.add(map);
        }
        
        ListItem listItemAdapter = new ListItem(T1Activity.this, listItem);
        listVIew.setAdapter(listItemAdapter);
    
    }
}

 

 


 

 

 

 

分割 布局

 

 

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="horizontal" 
    android:paddingLeft="8dip"
    android:paddingRight="8dip"
    android:paddingTop="4dip"
    android:paddingBottom="4dip"
    android:background="#E3E3E3"
    >
    <TextView   
       android:id="@+id/monitor_list_left"  
       android:layout_width="fill_parent"  
       android:layout_height="wrap_content"
       android:textSize="10dp"  
       >     
   </TextView>      

</RelativeLayout>

 

 

** 如果空间是EditText 时不能获取焦点的问题

 

    先设置litView 属性  android:scrollbars="none" 

 

    然后给 listVIew 的 父 层级 添加一个  LinearLayout , 再在外面添加一个 ScrollView ,  遇到 listview 无法显示完全的办法是 给他的 layout_height 写死

 

 

 

** 得到 ListView 中 各个控件中的值

 

			/*
			for (int i = 0; i < listVIew.getChildCount(); i++) {
			     LinearLayout ll = (LinearLayout)listVIew.getChildAt(i);// 获得子级
			     CheckBox chkone = (CheckBox) ll.findViewById(R.id.chkone);// 从子级中获得控件
			     
			     System.out.println("chkone.isChecked():----------->"+chkone.isChecked());
			}
			*/	
			RelativeLayout ll = (RelativeLayout)listVIew.getChildAt(0);// 获得子级
			CheckBox chkone = (CheckBox) ll.findViewById(R.id.monitor_list_right);// 从子级中获得控件
			if(chkone.isChecked()){
				System.out.println("点击了");
			}else{
				System.out.println("没点击");
			}

 

 

注意  RelativeLayout ll = (RelativeLayout)listVIew.getChildAt(0); 需要根据 子 布局的 不同 布局方式 定义 RelativeLayout  或  LinearLayout 

 

 

 ** 关于处理 刷新 listView 置顶问题 使用 notifyDatasetchanged() 在之前先 将 listItemAdapter 里面的构造函数中的变量 重新赋值

		
		if(!doFir){
			listItemAdapter = new LoginIndexList(LoginIndex.this, listItem,1+Integer.parseInt(localDeviceArray[99]));  
			listVIew.setAdapter(listItemAdapter);
		}else{
			
			listItemAdapter.list = listItem;
			listItemAdapter.cut = 1+Integer.parseInt(localDeviceArray[99]);  
			listItemAdapter.notifyDataSetChanged();

		}
		
		doFir = true;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 大小: 14 KB
分享到:
评论

相关推荐

    Android_ListView控件基本用法

    ### Android ListView 控件基本用法详解 #### 一、引言 在Android应用开发中,经常需要展示大量的数据项,并且这些数据项通常具有相似的结构。为了有效地处理这类需求,Android提供了一种非常有用的控件——`...

    安卓手机 ListView控件的三种使用方式

    在Android开发中,ListView是应用界面中非常常见的一种控件,它用于展示大量数据的列表形式,具有良好的滚动性能和可扩展性。本教程将详细讲解如何在安卓手机上使用ListView控件,从基础到进阶,通过四个案例来帮助...

    Android中ListView添加头部

    在Android应用开发中,ListView是一种常用的控件,用于展示大量数据列表。它的可滚动特性使得它在各种场景下都非常实用,比如展示联系人、菜单项等。然而,仅仅使用ListView来展示列表数据并不足够,很多时候我们...

    Android ListView边框圆角美化

    在Android开发中,ListView是常用的一种控件,用于展示大量数据列表。为了提升用户体验和界面设计的美观性,我们常常需要对ListView进行定制化,包括设置边框和实现圆角效果。本文将深入探讨如何在Android中实现...

    Android ListView控件基本用法

    Android ListView 控件基本用法 Android ListView 控件是一种基础控件,主要用于展示列表数据。在 Android 开发中,ListView 控件是最常用的控件之一。下面我们将详细介绍 Android ListView 控件的基本用法。 一、...

    安卓树形控件相关-Android使用ListView实现一个高性能无限层级显示的树形控件.rar

    本资料"Android使用ListView实现一个高性能无限层级显示的树形控件"旨在教你如何利用ListView创建一个可以处理无限层级的树形控件。 首先,我们需要理解ListView的工作原理。ListView是一个视图容器,它通过复用...

    android listview自定义控件例子

    在Android开发中,ListView是一个非常重要的视图组件,它允许我们显示大量的数据并进行滚动操作。本示例将深入探讨如何在Android中自定义ListView,包括它的创建、数据绑定以及实现一些视觉效果。 首先,创建一个...

    android ListView子控件监听

    在Android开发中,ListView是...通过以上方式,开发者可以灵活地为Android ListView的子控件设置各种事件监听,以满足不同应用场景的需求。理解并掌握这些监听机制,对于开发高效且用户体验良好的Android应用至关重要。

    Android ListView 下拉刷新、上拉加载

    在Android开发中,ListView是常用的一种控件,用于展示大量数据列表。`下拉刷新`和`上拉加载`功能的实现,极大地提升了用户体验,让用户能够实时获取到最新的数据。本篇文章将深入探讨如何在ListView中实现这两种...

    listview实现动态加载

    在Android开发中,ListView是一...综上,"ListView实现动态加载"涵盖了Android开发中的数据适配、视图复用、异步加载、滚动监听、内存优化等多个重要知识点。熟练掌握这些技巧,对于构建流畅、高效的列表界面至关重要。

    Android-ListView中嵌套(ListView)控件兼容问题

    ### Android-ListView中嵌套(ListView)控件兼容问题 #### 背景与问题描述 在Android开发中,有时我们需要在`ListView`中嵌套另一个`ListView`以实现更复杂的用户界面设计。然而,在实际操作过程中可能会遇到一些...

    android自定义ListView控件实现下拉刷新、分页加载、item点击

    然而,为了提供更好的用户体验,我们经常需要对ListView进行自定义,添加一些高级功能,如下拉刷新、分页加载以及Item点击事件处理。这篇内容将详细介绍如何在Android中实现这些功能。 一、下拉刷新 下拉刷新功能...

    Android ListView控件的使用(自定义适配器 + ListView + 解决OOM )

    在Android开发中,ListView是一个非常重要的控件,用于展示大量数据列表。本教程将深入讲解如何使用ListView,结合自定义适配器以及解决Out-Of-Memory(OOM)问题。 首先,`ListView`是一个可滚动的视图,它能够...

    Android中ListView上拉加载和下拉刷新

    在Android开发中,ListView是一种非常常见的控件,用于展示大量数据列表。它的高效性和可滚动性使得它在处理数据展示时十分受欢迎。本篇将详细探讨如何实现ListView的上拉加载(Load More)和下拉刷新(Pull to ...

    Android中的ListView控件学习

    在Android开发中,ListView是一个非常重要的控件,它允许开发者在一个垂直滚动的列表中展示大量数据。本篇文章将深入探讨ListView的基本用法、工作原理以及优化策略,旨在帮助你掌握这个核心组件。 **1. ListView的...

    android控件应用 自定义的ListView控件,下拉刷新上拉加载更多

    在Android开发中,ListView是一种非常常用的控件,用于展示大量数据列表。自定义ListView不仅可以满足基本的显示需求,还能实现更多的交互效果,如下拉刷新和上拉加载更多功能。这两种功能在现今的移动应用中非常...

    [毕设季 android开发]第四讲:Android高级控件ListView

    在Android应用开发中,ListView控件是至关重要的一个部分,特别是在构建新闻类、信息类应用时,它能够有效地展示大量的列表数据,使用户能够轻松滚动浏览。本讲将深入探讨ListView的基本概念、工作原理以及如何在...

    android listView图片异步加载(拖动时不加载,双缓存)

    在Android开发中,ListView是常用的一种控件,用于展示大量数据列表。然而,当这个列表包含图片时,如果直接在主线程中加载,会导致UI卡顿,用户体验下降。因此,我们需要采用异步加载图片的方式,同时为了优化性能...

    Android中ListView实现表格效果

    在Android开发中,ListView是一种非常常见的控件,用于展示大量数据列表。然而,有时我们不仅需要展示单一列表,还可能需要实现类似表格的效果,比如显示多列数据。本篇文章将详细讲解如何在Android中利用ListView...

    Android ListView 控件学习

    当ListView加载时,它不会一次性渲染所有条目,而是只渲染可视范围内的条目,这就是所谓的“视图复用”(View Recycling)。这一策略大大提高了ListView的性能,但同时也要求开发者注意避免因视图复用导致的显示问题...

Global site tag (gtag.js) - Google Analytics