第7篇.ListView相關

一、做listview的時候,遇到出現重複的view,比如總數爲10,最大顯示爲5,則listview顯示爲1、2、3、4、5、1、2、3、4、5等循環的;我們需求的爲顯示1、2、3、4、5、6、7、8、9、10;主要是listview的緩存機製造成的,下面貼Adapter的getView()代碼如下:

解析:把對控件setText的操作放到if (convertView == null) {}的外面來即可,否則會一直使用初始化的時候的那個值

</pre><p></p><p><span style="white-space:pre"></span></p><p></p><pre name="code" class="html">    public View getView(int position, View convertView, ViewGroup parent) {   
        // TODO Auto-generated method stub   
        Log.e("oydz", "position : " + position);  
        final int selectID = position;   
        ListItemView  listItemView = null;   
        if (convertView == null) {   
            listItemView = new ListItemView();    
            convertView = listContainer.inflate(R.layout.recordfile_listview_item, null);   

            listItemView.FileNum = (TextView)convertView.findViewById(R.id.item_num);   
//            //listItemView.FileNum.setText(position + 1 +"");
            
            listItemView.FileName = (TextView)convertView.findViewById(R.id.item_filename); 
//            //listItemView.FileName.setText(listFiles.get(position).getName());

            
            listItemView.FileSize = (TextView)convertView.findViewById(R.id.item_filesize);   
//            //listItemView.FileSize.setText(getFileSize(listFiles.get(position)));
 
            convertView.setTag(listItemView);   
        }else {   
            listItemView = (ListItemView)convertView.getTag();   
        }   
        listItemView.FileNum.setText(position + 1 +"");
        listItemView.FileName.setText(listFiles.get(position).getName());
        listItemView.FileSize.setText(getFileSize(listFiles.get(position)));
        return convertView;   
    } 

二、listview會遇到這樣的情況,描述如下:

進入activity,listview默認第一項爲選擇狀態(有焦點框),點擊某個按鈕,觸摸(select)某個item焦點框依然存在,並且當某個item獲得焦點時裏面的子控件需要發生相關變化

遇到這種需求,最開始使用的方式是對listview控件的listSelector屬性進行修改,但是在點擊完之後,item背景顏色是變化了,但是裏面的子控件不會保存變化;等等都沒有達到想要的效果;最終的解決方式是在適配器裏面,進行的;獲取得到select的位置,之後在返回view的時候返回指定的形式即可(可能描述不清楚,見諒!),相關代碼如下:

   public View getView(int position, View convertView, ViewGroup parent) {   
        // TODO Auto-generated method stub    
        final int selectID = position;   
        ListItemView  listItemView = null;   
        if (convertView == null) {   
            listItemView = new ListItemView();    
            convertView = listContainer.inflate(R.layout.lexus_videolist_item, null);   

            listItemView.Rlayout = (RelativeLayout)convertView.findViewById(R.id.mrelayout);   
            
            listItemView.FileNum = (TextView)convertView.findViewById(R.id.lexus_item_num);   
            //listItemView.FileNum.setText(position + 1 +"");
            
            listItemView.FileName = (TextView)convertView.findViewById(R.id.lexus_item_filename); 
            //listItemView.FileName.setText(listFiles.get(position).getName());

            
            listItemView.FileSize = (TextView)convertView.findViewById(R.id.lexus_item_filesize);   
            //listItemView.FileSize.setText(getFileSize(listFiles.get(position)));
 
            convertView.setTag(listItemView);   
        }else {   
            listItemView = (ListItemView)convertView.getTag();   
        }   
        //1:not same item
        File file = new File(listFiles.get(position));
        if(file != null){
        	listItemView.FileNum.setText(position + 1 +"");
        	listItemView.FileName.setText(file.getName());
        	listItemView.FileSize.setText(getFileSize(file));
        }
        //2:set Select item by man, not auto, fuck
        if(PlayListActivity.SelectPostion==position){
        	listItemView.Rlayout.setBackground(context.getResources().getDrawable(R.drawable.lexus_media_list_btn_p));
        	listItemView.FileNum.setTextColor(context.getResources().getColor(R.color.black));
        	listItemView.FileName.setTextColor(context.getResources().getColor(R.color.black));
        	listItemView.FileSize.setTextColor(context.getResources().getColor(R.color.black));
        } else {   
        	listItemView.Rlayout.setBackground(context.getResources().getDrawable(R.color.lucency));  
        	listItemView.FileNum.setTextColor(context.getResources().getColor(R.color.white));
        	listItemView.FileName.setTextColor(context.getResources().getColor(R.color.white));
        	listItemView.FileSize.setTextColor(context.getResources().getColor(R.color.white));
        }
        
        
        return convertView;   
    } 




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