Android ListView分組佈局改進

轉自:http://www.cnblogs.com/top5/archive/2012/05/05/2484916.html

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

650) this.width=650;" src="http://img1.51cto.com/attachment/201305/101127997.gif" title="0_1310740912kQis.gif" />

然後是實現該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>





發佈了26 篇原創文章 · 獲贊 6 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章