ListView

一. ListView属性大全

1. 背景色: listView设置背景色android:background="@drawable/bg",拖动或者点击list空白位置的时候发现ListItem都变成黑色。 因为默认的ListItem背景是透明的,而ListView的背景是固定不变的,所以在滚动条滚动的过程中如果实时地去将当前每个Item的显示内容跟背景进行混合运算,所以android系统为了优化这个过程用,就使用了一个叫做android:cacheColorHint的属性,在黑色主题下默认的颜色值是#191919,所以就出现了刚才的画面,有一半是黑色的。

如果你只是换背景的颜色的话,可以直接指定android:cacheColorHint为你所要的颜色;如果你是用图片做背景的话,那也只要将android:cacheColorHint指定为透明(#00000000)就可以了,当然为了美化是要牺牲一些效率的。

2. android:fadingEdge="none" 去掉上边和下边黑色的阴影

3. android:divider="@drawable/list_driver" 其中 @drawable/list_driver 是一个图片资源lsitview的每一项之间需要设置一个图片做为间隔

设置Item之间无间隙

android:divider="#00000000" 或者在javaCode中如下定义:listView.setDividerHeight(0);

4. android:listSelector="@color/pink" listView item 选中时的颜色。默认为橙黄底色。

5. android:divider="@drawable/list_driver" 设置分割线的图片资源,如果则只要设置为

android:divider="@drawable/@null" 不想显示分割线

6. android:scrollbars="none" setVerticalScrollBarEnabled(true); 隐藏listView的滚动条

7. android:fadeScrollbars="true" 设置为true就可以实现滚动条的自动隐藏和显示

8. android:transcriptMode="alwaysScroll" 用ListView或者其它显示大量Items的控件实时跟踪或者查看信息,希望最新的条目可以自动滚动到可视范围内。通过设置的控件transcriptMode属性可以将Android平台的控件(支持ScrollBar)自动滑动到最底部。

android:fastScrollEnabled="false"

android:fastScrollEnabled = "true" 加快滑动速度

android:drawSelectorOnTop="false"

android:scrollingCache="false" 

android:drawSelectorOnTop="true" 点击某一条记录,颜色会显示在最上面,记录上的文字被遮住,所以点击文字不放,文字就看不到

android:drawSelectorOnTop="false" 点击某条记录不放,颜色会在记录的后面,成为背景色,但是记录内容的文字是可见的

二 listView上拉加载更多和下拉刷新

1.布局

<net.hyww.widget.xlistview.PullToRefreshView
        android:id="@+id/main_pull_refresh_view"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    <ListView
            android:scrollbars="none"
            android:id="@+id/lv_time"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:cacheColorHint="@android:color/transparent"
            android:divider="@drawable/line_gray"
            android:listSelector="@android:color/transparent"
            android:dividerHeight="1px"
            android:paddingBottom="5dip"
            android:fadingEdgeLength="0dp"/>

    <!-- </LinearLayout> -->

</net.hyww.widget.xlistview.PullToRefreshView>
2.在fragment或者activity初始化时候

mPullToRefreshView = (PullToRefreshView) findViewById(R.id.main_pull_refresh_view);
mPullToRefreshView.setOnHeaderRefreshListener(this);
mPullToRefreshView.setOnFooterRefreshListener(this);
3. listview添加头和尾

头:

circleHeadView = setHeadView();
if (circleHeadView != null) {
    lv_time.addHeaderView(circleHeadView);
}
尾:

footerView = LayoutInflater.from(mContext).inflate(R.layout.weibo_details_frg_footer,null);

尾的布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:gravity="center"
    android:visibility="gone">

    <ProgressBar
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:id="@+id/progressBar"
        android:indeterminate="false"
        android:visibility="gone"/>
    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="5dp"
        android:text="正在加载中..."
        android:textSize="18.0sp"
        android:textColor="@color/color_666666"
        android:visibility="gone"/>

</LinearLayout>

4 刷新方法

 * 刷新所有
 */
private void reflashAll() {
    doRequest(true);
}

@Override
public void onHeaderRefresh(PullToRefreshView view) {
    reflashAll();
}

@Override
public void onFooterRefresh(PullToRefreshView view) {
    
doRequest(false);
}
  /**
     * 请求页面
     *
     * @param isRefresh
     */
    protected void doRequest(final boolean isRefresh) {
        if (!UserUtils.getInstance().isOnline(mContext)) {
            return;
        }
        if (isRefresh)
            current_page = 1;
        else
            current_page++;

        final LoadingDialog loadingDialog = LoadingDialog.newInstance();
        if (mAdapter.getCount() == 0) {
            loadingDialog.show(getChildFragmentManager(), "loading");
        }

        String requestStr=RequestBuilder.getInstance().buildConditionRequest(App.getUser().user_id, getClassId(), setRequestType(), Cfg.PAGE.PAGE_SIZE, current_page,showCircleRange());

        RequestTarget.URL_TARGET target = getUrlTarget();
        VolleryFactory.getInstance().JsonPostAES(getActivity(),
                target,requestStr,
                new BaseRequest() {
                    @Override
                    public void requestSucceed(Object object) {

                        try {
                            loadingDialog.dismissAllowingStateLoss();
                        } catch (Exception e) {

                        }

                        if (current_page == 1) {
                            lastPullRlashTime = TimeUtils.getCurrentTime("HH:mm");
                        }
                        finishReflush();
                        result = (TimeLineResult) object;
                        if (result == null || !TextUtils.isEmpty(result.error)) {
                            return;
                        }
                        ArrayList<TimeLineResult.Condition> list = new ArrayList<TimeLineResult.Condition>();
                        if (ListUtils.getSize(result.statuses) > 0) {
                            for (TimeLineResult.Condition condition : result.statuses) {
                                if (condition.is_essence == Cfg.TimeLinePostType.NOMAL_POST || condition.is_essence == Cfg.TimeLinePostType.ESSENCE_POST || condition.is_essence == Cfg.TimeLinePostType.AD_POST || condition.is_essence == Cfg.TimeLinePostType.ACTIVITY_POST) {
                                    list.add(condition);
                                }
                            }
                        }
                        if (current_page == 1) {
                            if (ListUtils.getSize(list) > 0) {
                                no_content_show.setVisibility(View.GONE);
                            } else {
                                no_content_show.setVisibility(View.VISIBLE);
                            }
                            mAdapter.setList(list);
                            if (circleHeadView != null) {//更新headerview
                                try {
                         //          requestClassStar();
                                    circleHeadView.reflash(true);
                                } catch (Exception e) {
                                    e.printStackTrace();
                                }
                            }
                            saveDataCache(list);
                        } else {
                            List<TimeLineResult.Condition> currentList = mAdapter.getList();
                            if (currentList != null && currentList.size() > 0) {
                                currentList.addAll(list);
                            }
//                            else {
//                                mAdapter.setList(list);
//                                //TODO:结果小于每页条目,则翻页到底了。
//                            }
                        }
                        mAdapter.notifyDataSetChanged();
                    }

                    @Override
                    public void requestFailed() {
                        try {
                            loadingDialog.dismissAllowingStateLoss();
                        } catch (Exception e) {

                        }
                        finishReflush();
                    }
                }
        );
    }
/**
 * 保存第一页缓存数据
 *
 * @param list
 */
public void saveDataCache(ArrayList<TimeLineResult.Condition> list) {
    if(App.getUser().class_id==getClassId())
        SharedUtil.saveObjectCache(mContext,setDataCacheName(), list);
}

//完成刷新
  private void finishReflush() {
//        dismissDialog(DialogCreater.DIALOG_LOADING);
        mPullToRefreshView.onFooterRefreshComplete();
        mPullToRefreshView.onHeaderRefreshComplete(lastPullRlashTime);
    }
//获取本地数据
getData();
/**
 * 获取本地缓存数据
 */
protected void getData() {
    new LoadCacheData().execute();
}
public class LoadCacheData extends AsyncTask<Void,Void,ArrayList<TimeLineResult.Condition>>{

        @Override
        protected ArrayList<TimeLineResult.Condition> doInBackground(Void... params) {
            ArrayList<TimeLineResult.Condition> list = SharedUtil.getObjectCache(mContext,setDataCacheName(), new TypeToken<ArrayList<TimeLineResult.Condition>>() {
            }.getType());
            return list;
        }

    @Override
    protected void onPostExecute(ArrayList<TimeLineResult.Condition> list) {
        if (ListUtils.getSize(list) > 0) {
            mAdapter.setList(list);
        }else{
            mAdapter.setList(null);
        }
        mAdapter.notifyDataSetChanged();
        /**
         * 圈子缓存2小时数据不刷新,其他继承EssenceCircleBaseFrg 实时刷新
         */
        if(subscriptViewVisibale()){
            long cache_rircle_time = SharedDataCacheTimeUtil.getLongCommon(mContext, SharedDataCacheTimeUtil.SHARE_CIRCLE_TIME_KEY);
            if(cache_rircle_time!=-1&& TimestampUtils.compareTimestampHour(System.currentTimeMillis(), cache_rircle_time)<2){
                if (circleHeadView != null) {
                    circleHeadView.reflash(false);
                }
                return;
            }
        }
        reGetData();
    }
}

/**
 * 刷新未读记录
 */
private void requestUnreadMsgNumber() {
    subscriptView.setVisibility(View.VISIBLE);
    VolleryFactory.getInstance().JsonPostAES(mContext, RequestTarget.URL_TARGET.MSG_BOX_UNREAD_NUMBER,
            RequestBuilder.getInstance().buildMsgBoxUnreadNumberRequest(App.getUser().user_id),
            new BaseRequest() {
                @Override
                public void requestSucceed(Object object) {
                    MsgUnreadNumberResult result = (MsgUnreadNumberResult) object;
                    if (result == null || !TextUtils.isEmpty(result.error)) {
                        return;
                    }
                    int unreadCount=0;
                    if(App.getClientType()==Cfg.UserRole.PARENT){
                        unreadCount = result.number+result.study_number;
                    }else{
                        unreadCount = result.number;
                    }
                    if (unreadCount > 0) {
                        subscriptView.setText("" + unreadCount);
                        subscriptView.setTextVisibility(View.VISIBLE);
                    } else {
                        subscriptView.setTextVisibility(View.GONE);
                    }
                    if (listener != null)
                        listener.callBack(unreadCount);
                }

                @Override
                public void requestFailed() {

                }
            }
    ,false);
}
//回传圈子是否有新消息给activity
public interface RefreshCircleTabCallBack {
    public void callBack(int num);//value为传入的值
}

@Override
    public void onResume() {
        super.onResume();
        try {
            if (subscriptViewVisibale()) {
                requestUnreadMsgNumber();
            }
            if(circleHeadView!=null){
                circleHeadView.onResume();
            }
//            reflashAll();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public void onPause() {
        if(circleHeadView!=null){
            circleHeadView.onPause();
        }
        super.onPause();
    }




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值