1. 程式人生 > >ListView常用屬性及設置點擊事件

ListView常用屬性及設置點擊事件

ray 我們 背景圖片 pri lse activit lists .get .sh

***1.ListView控件常用屬性
choiceMode:設置ListView的選擇行為
divider:設置列表項的分隔條的顏色
dividerHeight;設置分隔條高度
entries:指定一個數組資源,android將根據該資源生成listview,如android:entries="@array/xxx",資源可以到values文件夾中的string.xml中添加
footerDividersEnabled:如果設置為false將不會在footerView之前設置分隔條
headerDividersEnabled:如果設置為false將不會在headerView之後設置分隔條

***2.常見問題及解決方法
問題1:listview在拖動的時候背景圖片消失變成黑色背景。等到拖動完畢我們自己的背景圖片才顯示出來。
解決辦法:
xml中: android:scrollingCache="false" 或者 android:cacheColorHint="#00000000"
代碼中: setScrollingCacheEnabled(false) 或者 setCacheColorHint(0) 或者setCacheColorHint(Color.TRANSPARENT);
問題2:listview的上邊和下邊有黑色的陰影。
解決辦法:
xml中: android:fadingEdge="none"
代碼中:setFadingEdgeLength(0);
問題3:lsitview的每一項之間需要設置一個圖片做為間隔。
解決辦法:
xml中 :android:divider="@drawable/list_driver
java中:Drawable dr = this.getResources().getDrawable(R.colo.listviewdividerClour);
ListView.setDivider(dr);
問題4:默認會顯示選中的item為橙黃底色,有時候我們需要去掉這種效果:
解決辦法:
xml中:listSelector="@android:color/transparent
衍生:ListView選中時默認是黃色,很多時候會和我們軟件的配色不符合,那麽需要修改默認的ListView配色,
java中:
Drawable drawable=getResources().getDrawable(R.drawable.touch_feedback);
ListView.setSelector(drawable);
xml中:
listSelector="@android:color/blue
同理運用到 GridView中

***3.設置ListView控件的點擊事件:

public class MainActivity extends Activity {
    private ArrayAdapter<String> adapter;
    private ListView lv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        lv = (ListView) findViewById(R.id.listview);
        //1.準備數據源(可以直接在這裏定義數組,也可在strings.xml中定義數據源,然後在這裏獲取)
        final String[] citys = getResources().getStringArray(R.array.citys);
        //2.將數據源的數據加載到適配器中
        adapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1,citys);
        //3.將適配器中的數據加載到控件中
        lv.setAdapter(adapter);
        
        //為ListView控件的每個Item設置監聽事件
        lv.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                /*獲取Item中數據的四種方式*/
                String s1 = citys[position];//從數據源中獲取
                String s2 = adapter.getItem(position);//從適配器中獲取
                String s3 = parent.getItemAtPosition(position).toString();//從parent中獲取
                String s4 = lv.getItemAtPosition(position).toString();//從ListView控件中獲取
                Toast.makeText(MainActivity.this, "s1="+s1+",s2="+s2+",s3="+s3+",s4="+s4, Toast.LENGTH_SHORT).show();   
            }
            
        });
        //這是為ListView控件中的Item設置長按事件
        lv.setOnItemLongClickListener(new OnItemLongClickListener() {
            //這是長按時的回調函數
            //若ListView既綁定監聽事件也綁定了長按事件,此時返回值為false時表示對事件不處理(對點擊和長按事件都會觸發),若為true表示對事件處理(只對長按事件觸發)
            @Override
            public boolean onItemLongClick(AdapterView<?> parent, View view,
                    int position, long id) {
                return false;
            }   
        });
    }
}

ListView常用屬性及設置點擊事件