• android样式布局--->ListView(附上源代码)


    在android应用开发过程中,Listview 是经常使用的数据展现控件,往往用于显示列表形式的数据。

    假设只显示数据往往会显得非常单调。非常多时候依据须要定义不同的item 背景选项。比如定义数据的标题。表头或者间隔显示Listview item背景内容。

    如图的所看到的的背景内容,如今以一个WeatherDemo为模型分析Listview的相关用法。


    实现思路:定义Listview不同的背景,首先要定义好标题与表格内容的两个不同的xml布局文件(city_item.xml,content_item.xml)。

    在填充数据的时候往往採用构造一个Adapter数据类型,依据构造的数据类型,推断不同的数据类型,採用LayoutInflater类填充不同的layout文件,从而返回不同的View。


    构造WeatherAdapter类继承BaseAdapter并实现相关的接口函数,实现对列表数据的填充。

    当中数据的结构比較关键,能够控制相关的标题和内容的关系。

    WeatherAdapter类则主要是实现并填充对应的数据。显示相关数据。

    程序代码例如以下:

    public class WeatherAdapter extends BaseAdapter {
    
    	// 数据源
    	private List<HashMap<String, String>> list;
    	private Context context;
    	private int[] type;
    
    	// 构造函数
    	public WeatherAdapter(Context context, List<HashMap<String, String>> list, int[] type) {
    		this.context = context;
    		this.list = list;
    		this.type = type;
    	}
    
    	@Override
    	public int getCount() {
    		// TODO Auto-generated method stub
    		return list.size();
    	}
    
    	@Override
    	public Object getItem(int position) {
    		// TODO Auto-generated method stub
    		return list.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) {
    		// TODO Auto-generated method stub
    		LayoutInflater mInflater = LayoutInflater.from(context);
    		// 产生一个View
    		View view = null;
    		// 依据type不同的数据类型构造不同的View,也能够依据1,2,3天数构造不同的样式
    		if (type[position] == 0) {
    			view = mInflater.inflate(R.layout.city_item, null);
    			// 获取城市名称
    			String cityName = list.get(position).get("data");
    			ImageView image = (ImageView) view.findViewById(R.id.weather_image);
    
    			if (cityName.equals("北京")) {
    				image.setImageResource(R.drawable.beijing);
    			} else if (cityName.equals("上海")) {
    				image.setImageResource(R.drawable.shanghai);
    
    			} else if (cityName.equals("广州")) {
    				image.setImageResource(R.drawable.guangzhou);
    
    			} else if (cityName.equals("深圳")) {
    				image.setImageResource(R.drawable.shenzhen);
    
    			}
    			TextView city = (TextView) view.findViewById(R.id.city);
    			city.setText(cityName);
    		} else {
    			view = mInflater.inflate(R.layout.content_item, null);
    			// 获取数据
    			String content = list.get(position).get("data");
    			// 分离数据
    			String[] items = content.split(",");
    
    			TextView weather = (TextView) view.findViewById(R.id.content);
    			weather.setText(items[0] + "天气: " + items[1] + ";温度:  " + items[2]);
    			TextView date = (TextView) view.findViewById(R.id.date);
    			date.setText(items[3]);
    
    		}
    		return view;
    	}
    
    }
    

    MainActivity.java 

    public class MainActivity extends Activity {
    	@Override
    	public void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.main);
    		ListView list = (ListView) findViewById(R.id.list_items);
    
    		ArrayList<HashMap<String, String>> listItem = new ArrayList<HashMap<String, String>>();
    
    		// 各个城市的天气
    		String[] data = { "广州", "今天,晴天,22℃,2014-4-18",
    				"明天,多云转阵雨,32~23℃,2014-4-19", "后天,阴转多云,33~23℃,2014-4-20", "上海",
    				"今天,阵雨转雷阵雨,31~25℃,2014-4-18", "明天,雷阵雨转阴,31~24℃,2014-4-19",
    				"后天,阵雨转多云,32~27℃,2014-4-20", "北京", "今天,中雨转暴雨,32~25℃,2014-4-18",
    				"明天,暴雨转大到暴雨,29~25℃,2014-4-19", "后天,暴雨转阵雨,29~25℃,2014-4-20",
    				"深圳", "今天,中雨转暴雨,31~25℃,2014-4-18", "明天,暴雨,29~24℃,2014-4-19",
    				"后天,大雨转阵雨,28~25℃,2014-4-20" };
    		// 能够是城市的类型推断或者第几天推断,依据不同的需求构造不同的数组结构适应不同的应用
    		int[] type = { 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3 };
    		int size = data.length;
    		for (int i = 0; i < size; i++) {
    			HashMap<String, String> map = new HashMap<String, String>();
    			// 依据不同需求能够构造更复杂的数据,眼下之构造一个数据
    			map.put("data", data[i]);
    			listItem.add(map);
    		}
    		WeatherAdapter listItemAdapter = new WeatherAdapter(this, listItem, type);
    		list.setAdapter(listItemAdapter);
    
    	}
    }


    三个xml布局文件:


    city_item.xml

    <?xml version="1.0" encoding="utf-8"?

    > <!-- items选项 --> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/RelativeLayout" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="#9ACD32" android:paddingBottom="4dip" android:paddingLeft="12dip" android:paddingRight="12dip" > <ImageView android:id="@+id/weather_image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:paddingTop="4dip" android:contentDescription="@string/weather_image"/> <TextView android:id="@+id/city" android:layout_width="fill_parent" android:layout_height="wrap_content" android:paddingTop="6dip" android:textColor="@color/black" android:textSize="18sp"/> </RelativeLayout>


    content_item.xml

    <?xml version="1.0" encoding="utf-8"?

    > <!-- items选项 --> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/RelativeLayout02" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@color/white" android:paddingBottom="4dip" android:paddingLeft="12dip" android:paddingRight="12dip" > <!-- 能够删除 <ImageView android:id="@+id/image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:paddingTop="22dip" android:contentDescription="@string/image" /> --> <TextView android:id="@+id/content" android:layout_width="fill_parent" android:layout_height="wrap_content" android:paddingTop="6dip" android:textSize="15sp"/> <TextView android:id="@+id/date" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_below="@+id/content" android:paddingRight="20dip"/> </RelativeLayout>

    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:id="@+id/list_items"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:divider="@color/white"
            android:dividerHeight="1dip" >
        </ListView>
    
    </LinearLayout>

    源代码下载地址:http://download.csdn.net/detail/yangweixing10/7214057

  • 相关阅读:
    Kafka的安装和设置
    Nginx的安装和设置
    Spark实现K-Means算法
    Spark GraphX实例(2)
    Scala字符串插值
    Scala的Class、Object和Apply()方法
    Spark GraphX实例(1)
    java.lang.ClassNotFoundException: SparkPi$$anonfun$1
    Intellij IDEA连接Spark集群
    Container [pid=6263,containerID=container_1494900155967_0001_02_000001] is running beyond virtual memory limits
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5208176.html
Copyright © 2020-2023  润新知