Android ListView分組佈局改進

轉自:程序開發技術交流分享

由於是在網上轉載的一篇文章,在這裏就不多說廢話了,首先看一下最終的效果圖:


然後是實現該ListView佈局的主要代碼:

1、程序主界面 SeparateListView.java

package whu.iss.wuxianglong;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;

public class SeparateListView extends Activity {
	ListView listView;
	MyAdapter myAdapter;
	public List<String> listTag = new ArrayList<String>();

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        listView = (ListView) findViewById(R.id.list);
		myAdapter = new MyAdapter(this,
				android.R.layout.simple_expandable_list_item_1, getData());
		listView.setAdapter(myAdapter);
    }
    private List<String> getData() {
        List<String> data = new ArrayList<String>();
        int i = 0;

        data.add("A");
        listTag.add("A");
        data.add("aa試數據" + (i++));
        data.add("a試數據" + (i++));
        data.add("aa試數據" + (i++));
        listTag.add("B");
        data.add("B");
        data.add("bb試數據" + (i++));
        data.add("b試數據" + (i++));
        data.add("b試數據" + (i++));       
        data.add("b試數據" + (i++));
        listTag.add("C");
        data.add("C");
        data.add("c測試數據" + (i++));
        data.add("c測試數據" + (i++));
        listTag.add("D");
        data.add("D");
        data.add("d測試數據" + (i++));
        data.add("d測試數據" + (i++));
        data.add("d測試數據" + (i++));
        listTag.add("E");
        data.add("E");
        data.add("e測試數據" + (i++));
        data.add("e測試數據" + (i++));
        data.add("e測試數據" + (i++));
        listTag.add("F");
        data.add("F" );
        data.add("f測試數據" + (i++));
        return data;
    }

	
	class MyAdapter extends ArrayAdapter<String> {

		public MyAdapter(Context context,  int textViewResourceId,
				List<String> objects) {
			super(context,  textViewResourceId, objects);
		
		}

		@Override
		public boolean areAllItemsEnabled() {
			return false; 
		}

		@Override
		public boolean isEnabled(int position) {
			// 如果-開頭,則該項不可選 
			return !listTag.contains(getItem(position)); 
		}

		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
		    View view = convertView;
		  //根據標籤類型加載不通的佈局模板 
		    if(listTag.contains(getItem(position))){
		    	//如果是標籤項
		        view = LayoutInflater.from(getContext()).inflate(R.layout.group_list_item_tag, null);
		    }else{
		    	//否則就是數據項
		        view = LayoutInflater.from(getContext()).inflate(R.layout.group_list_item, null);
		    }
		  //顯示名稱
		    TextView textView = (TextView) view.findViewById(R.id.group_list_item_text);
		    textView.setText(getItem(position));
		  //返回重寫的view
		    return view;
		}
		
	}
}

2、程序主界面佈局文件main.xml

<?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"
    >
    <ListView
        android:id="@+id/list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">
    </ListView>
</LinearLayout>

3、ListView中數據部分樣式佈局文件group_list_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:padding="5dip">
    <ImageView 
       android:src="@drawable/icon"
       android:layout_width="50px"
       android:layout_height="50px">
    </ImageView>
    <TextView
       android:id="@+id/group_list_item_text" 
       android:layout_width="wrap_content" 
       android:layout_height="fill_parent"
       android:paddingLeft="5dip"
       android:gravity="center_vertical">
    </TextView>
</LinearLayout>

4、ListView中分組標誌行的樣式佈局文件group_list_item_tag.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="wrap_content"
    android:background="#555555"
    android:paddingLeft="10dip">
    <TextView
       android:id="@+id/group_list_item_text" 
       android:layout_width="wrap_content" 
       android:layout_height="20dip"
       android:textColor="#ffffff"
       android:gravity="center_vertical">
    </TextView>
</LinearLayout>

THE END!



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章