Android[初級教程]第八章 ExpandableListView控制項

來源:互聯網
上載者:User

這一章我們來學習ExpandableListView控制項,ExpandableListView就是可擴充清單控制項,還是拿西遊記來說,裡面唐僧師徙都各有各的本領,每個人的本領都不一樣,放一起顯示肯定不適合,這裡我們就用ExpandableListView控制項將他們顯示出來.

看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"> 
    <TextView android:text="西遊記各主人公能力" android:id="@+id/textView1" 
        android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView> 
    <ExpandableListView android:layout_height="wrap_content" 
        android:id="@+id/expandableListView" android:layout_width="match_parent"></ExpandableListView> 
    <TextView android:layout_height="wrap_content" 
        android:layout_width="fill_parent" android:text="@string/hello" 
        android:id="@+id/text"></TextView> 
</LinearLayout> 

還是跟前幾次一樣,定義了一個ExpandableListView控制項,下面是java原始碼:

 
import android.app.Activity; 
import android.os.Bundle; 
import android.view.Gravity; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AbsListView; 
import android.widget.BaseExpandableListAdapter; 
import android.widget.ExpandableListAdapter; 
import android.widget.ExpandableListView; 
import android.widget.ImageView; 
import android.widget.LinearLayout; 
import android.widget.TextView; 
 
public class ButtonDemoActivity extends Activity 

    private TextView text = null; 
    private int[] image = { R.drawable.tangseng, R.drawable.wukong, 
            R.drawable.bajie, R.drawable.shaseng }; 
    private String[] item = { "唐僧", "孫悟空 ", "豬八戒", "沙和尚" }; 
    private String[][] ability = { { "會念緊箍咒", "會說阿彌陀佛" }, 
            { "會七十二變", "會打妖精", "會騰雲駕霧" }, { "會偷懶", "會睡覺" }, { "會挑擔子" } }; 
    private ExpandableListView explandListView; 
 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main); 
 
        // 通過ID尋找到main.xml中的TextView控制項 
        text = (TextView) findViewById(R.id.text); 
 
        // 通過ID尋找到main.xml中的ExpandableListView控制項 
        explandListView = (ExpandableListView) findViewById(R.id.expandableListView); 
         
        //設定ExpandableListView適配器 
        ExpandableListAdapter adapter = new BaseExpandableListAdapter() 
        { 
             
            //處理子項目的單擊事件 
            @Override 
            public boolean isChildSelectable(int groupPosition, 
                    int childPosition) 
            { 
                String str = item[groupPosition] 
                        + ability[groupPosition][childPosition]; 
                updateText(str); 
                return true; 
            } 
 
            @Override 
            public boolean hasStableIds() 
            { 
                return true; 
            } 
             
            //返回父項目的視圖控制項 
            @Override 
            public View getGroupView(int groupPosition, boolean isExpanded, 
                    View convertView, ViewGroup parent) 
            { 
                //建立一個線性布局 
                LinearLayout ll = new LinearLayout(ButtonDemoActivity.this); 
                // 設定配置樣式為Horizontal 
                ll.setOrientation(0); 
                //設定布局左邊距為50像素 
                ll.setPadding(50, 0, 0, 0); 
                //建立一個ImageView對象 
                ImageView imageView = new ImageView(ButtonDemoActivity.this); 
                //設定ImageView要顯示的對象ID 
                imageView.setImageResource(image[groupPosition]); 
                //將ImageView加到線性布局中 
                ll.addView(imageView); 
                //使用自訂文字框 
                TextView textView = getTextView(); 
                //設定文字框裡顯示內容 
                textView.setText(getGroup(groupPosition).toString()); 
                //將TextView加到線性布局中 
                ll.addView(textView); 
                return ll; 
            } 
             
            //返回父控制項的ID 
            @Override 
            public long getGroupId(int groupPosition) 
            { 
                return groupPosition; 
            } 
             
            //返回父控制項的總數 
            @Override 
            public int getGroupCount() 
            { 
 
                return ability.length; 
            } www.2cto.com
             
            //取得父控制項對象 
            @Override 
            public Object getGroup(int groupPosition) 
            { 
                return item[groupPosition]; 
            } 
             
            //取得子控制項的數量 
            @Override 
            public int getChildrenCount(int groupPosition) 
            { 
                return ability[groupPosition].length; 
            } 
             
            //取得子控制項的視圖 
            @Override 
            public View getChildView(int groupPosition, int childPosition, 
                    boolean isLastChild, View convertView, ViewGroup parent) 
            {    
                //使用自訂TextView控制項 
                TextView textView = getTextView(); 
                //設定自訂TextView控制項的內容 
                textView.setText(getChild(groupPosition, childPosition) 
                        .toString()); 
                return textView; 
            } 
             
            //取得子控制項的ID 
            @Override 
            public long getChildId(int groupPosition, int childPosition) 
            { 
                return childPosition; 
            } 
             
            //取得子控制項的對象 
            @Override 
            public Object getChild(int groupPosition, int childPosition) 
            { 
                return ability[groupPosition][childPosition]; 
            } 
             
            //自訂文字框 
            public TextView getTextView() 
            { 
                AbsListView.LayoutParams lp = new AbsListView.LayoutParams( 
                        ViewGroup.LayoutParams.FILL_PARENT, 64); 
                TextView textView = new TextView(ButtonDemoActivity.this); 
                textView.setLayoutParams(lp); 
                textView.setPadding(20, 0, 0, 0); 
                //設定TextView控制項為向左,水平置中對齊 
                textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT); 
 
                return textView; 
 
            } 
        }; 
 
        explandListView.setAdapter(adapter); 
 
 
    } 
 
    private void updateText(String string) 
    { 
        // 將文本資訊設定給TextView控制項顯示出來 
        text.setText(string); 
    } 
 

 

 

 

其實ExpandableListView控制項使用起來還是比較方便的,只要學會了BaseExpandableListAdapter()的使用方法就可以了,當然,這裡面的布局都是在代碼部分產生的,為了擴充方便,也可以使用Layout.xml布局檔案來產生.這就留到課後,同學們自己想吧?主要是使用LayoutInflater,好了,今天這一課結束了,謝謝

 

摘自:kangkangz4的專欄

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.