android listview 一行高亮

来源:互联网 发布:淘宝裂变是什么意思 编辑:程序博客网 时间:2024/06/05 06:41

        listview这个控件,对于已经学过android的朋友是很熟悉的,应该不需要我在此来讲述下吧。

        举个简单的例子来回顾下吧。我们知道在我们手机上,通讯录是这样布局的,一行分为姓名和对应的号码,或者是姓名在上,对应的号码在姓名的下面。我简要说明一下思路吧,在编码实现时,我们需要先创建LinearLayout(当然啦,也可以在xml文件中布局)对象和ListView对象,LinearLayout用来显示ListView,接着通过ListAdapter将获取到的通讯录数据与ListView链接起来;接着将ListAdapter添加到ListView中;最后将ListView添加到LinearLayout中,让屏幕显示LinearLayout,要处理ListView事件,需要为ListView视图添加setOnItemSelectedListener监听以及setOnItemClickListener监听。注意,不要忽略了权限哦。在API文档中,Dev Guide一栏下,看左侧栏目,往下拉,找到<uses-permission>就可以了,涵盖了android手机中所使用的所有权限。

        以上是我们自己简单的创建的,但在开发中,我们有时需要自己来设计自己所需要的布局。这时就需要继承BaseAdapter,重写它的getView方法。代码如下参照下吧:

        

        public class MyAdapter extends BaseAdapter {  
        private LayoutInflater mInflater;  
        public MyAdapter(Context context) {  
            this.mInflater = LayoutInflater.from(context);  
        }  
        public int getCount() {   
            return mData.size();  
        }  
        public Object getItem(int arg0) {   
            return mData.get(arg0);  
        }  
        public long getItemId(int arg0) {   
            return arg0;  
        }  
        public View getView(int position, View convertView, ViewGroup parent) {  
            ViewHolder holder = null;  
            if (convertView == null) {  
                holder = new ViewHolder();  
                convertView = mInflater.inflate(R.layout.leftview, null);  
                holder.titleText = (TextView) convertView.findViewById(R.id.titleleftlist);  
                holder.infoText = (TextView) convertView.findViewById(R.id.infoleftlist);  
                  
                convertView.setTag(holder);           
            } else {  
                holder = (ViewHolder) convertView.getTag();  
            }  
              
            holder.titleText.setText((String) mData.get(position).get("title"));  
            holder.infoText.setText((String) mData.get(position).get("info"));            
              
            if (position == selectItem) {  
                convertView.setBackgroundColor(Color.RED);  
            }
   
            else {  
                convertView.setBackgroundColor(Color.TRANSPARENT);  
            }
     
              
            //convertView.getBackground().setAlpha(80);   
              
            return convertView;  
        }  
        public  void setSelectItem(int selectItem) {  
             this.selectItem = selectItem;  
        }  
        private int  selectItem=-1;  
    }  

 

        很容易就能看出来有个position,只要拥有这个position,那很容易解决了。就是红色标注的if(){}else{}中的语句。简单吧。

        当然我在开发MP3播放器的时候,想把当前播放的音乐进行高亮显示,目的就是为了能让用户能知道当前播放的是哪一首歌曲,采取上面的方法却不适合,总是给我出异常。最终我自己只要来实现的,效果就是我想要的,其实也很简单,代码如下:

       

        listview_allmusic.setOnItemClickListener(new OnItemClickListener() {

       @Override
       public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
                  for (int i = 0; i < arg0.getCount(); i++) {
                         View v = arg0.getChildAt(i);
                         v.setBackgroundColor(Color.TRANSPARENT);
                   }
                         arg1.setBackgroundColor(Color.RED);
                         MusicManager.getMusicManager().play(amlist.getList().get(arg2));
                   }

        });

 

      当然,还有中,我在开发某公司的android OA办公系统时,也加入这个技术,但我并不是采取以上的方法,我采取是传回来的接口数据的某个ID,对它进行判断,其实思路就是和上面一样,只不过,这时数据时已经写好的,我只是拿来调用的。

      高亮并不是很难,关键是理清头绪,就简单多了。

 

原创粉丝点击