加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

[转载]android listView取消高亮显示和内容刷新

(2014-09-06 21:52:46)
标签:

转载

android listView取消点击时的黄色高亮效果
listView里的item在点击的时候会变成黄色高亮显示,这时可以在listview里添加
 android:listSelector="@android:color/transparent"来取消黄色高亮效果.
 我一开始以为 android:listSelector="@null"也可以达到同样的目的,发现不行,因为
 AbsListView类里有如下方法

    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        if (mSelector == null) {
            useDefaultSelector();
        }
        final Rect listPadding = mListPadding;
        listPadding.left = mSelectionLeftPadding + mPaddingLeft;
        listPadding.top = mSelectionTopPadding + mPaddingTop;
        listPadding.right = mSelectionRightPadding + mPaddingRight;
        listPadding.bottom = mSelectionBottomPadding + mPaddingBottom;
    }

    如果用 android:listSelector="@null",那么会使用默认的selector

Android中的ListView内容刷新问题

最近在学习Android的listView控件时遇到了一个问题,如何添加一个Item到ListView中并及时的刷新出来。在网上查了很多帖子,很 多人在问,也很多人在解答,但是总的来说都没找到详细的解决方案。对于ListView与数据库的同步,高手们建议使用 ContentProvider对象。但是如果我不使用数据库呢?也有人回答用notifyDataSetChanged()方法。这倒是一个正确的解决 方案,但是对于新手来说,还是比较困惑怎么去用,这里我贴一下我的用法:

Java代码  

OnClickListener listener2 new OnClickListener()  
        @Override  
        public void onClick(View v)  
            // TODO Auto-generated method stub  
            MapObject> new HashMapObject>();  
            String tiString  tv.getText().toString(); // 注意这里我为什么要取出这个EditText的内容  
            m.put("prod_na"tiString); // 而不这样写 m.put("prod_na", tv.getText());  
            m.put("prod_type"tiString); // 因为tv.getText()返回的是Editable对象,真正的数据是被缓存的,  
                                          // 也就是说你后续的EditText改动都会影响之前添加的Item  
            coll.add(m);  
   
            // 取回Adapter对象,用于调用notifyDataSetChanged方法。  
            SimpleAdapter sAdapter (SimpleAdapter)lv.getAdapter();  
            sAdapter.notifyDataSetChanged();  
         
    };  


这里涉及到了Android中的MVC模式概念,如何存储数据,控制和显示。

你可以认为ListView是一个View,那么mode是什么呢?显然是SimpleAdapter对象,而Control又是什么呢?那只能是 notifyDataSetChanged()了。当数据变化时,也就是SimpleAdapter所处理的数据变化了,那么我们就需要调用 notifyDataSetChanged 去通知View作出改变。

记录和恢复ListView滚动的位置
有时候我们需要记录当前ListView滚动到的位置,重新加载的时候要回到原位,不罗嗦,给出代码:

Java代码  

//列表滚动  
private OnScrollListener ScrollLis new OnScrollListener()  
   
    @Override  
    public void onScroll(AbsListView arg0, int arg1, int arg2, int arg3)  
     
   
    @Override  
    public void onScrollStateChanged(AbsListView view, int scrollState)  
        if(scrollState==OnScrollListener.SCROLL_STATE_IDLE){  
                    ListPos=list.getFirstVisiblePosition();  //ListPos记录当前可见的List顶端的一行的位置  
             
     
};  

接下来就是还原位置,放在ListView加载之后:

Java代码  
list.setSelection(ListPos); 

0

  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有