浅析:Pulltorefresh使用中碰到的问题

第一在使用XScrollView布局是,无法在该布局.xml文件,放置内容布局控件,假如放置了会报错

<com.markmao.pulltorefresh.widget.XScrollView
       android:id="@+id/scroll_view"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:layout_below="@id/page_top"
       android:fillViewport="true"
       android:scrollbars="none" >
 
</com.markmao.pulltorefresh.widget.XScrollView>

XScrollView,通过看下面的代码你会发现该控件在初始化时已经去动态添加了一个子控件,假如你再去放置内容布局肯定会报错,因为android针对ScrollView的默认设置是只允许包含唯一子空间

public class XScrollView extends ScrollViewimplements OnScrollListener {
private LinearLayout mLayout;
   private LinearLayout mContentLayout;
public XScrollView(Context context) {
       super(context);
       initWithContext(context);
    }
 
   public XScrollView(Context context, AttributeSet attrs) {
       super(context, attrs);
       initWithContext(context);
    }
 
   public XScrollView(Context context, AttributeSet attrs, int defStyle) {
       super(context, attrs, defStyle);
       initWithContext(context);
    }
 
   private void initWithContext(Context context) {
       mLayout = (LinearLayout) View.inflate(context,R.layout.vw_xscrollview_layout, null);
       mContentLayout = (LinearLayout)mLayout.findViewById(R.id.content_layout);this.addView(mLayout);
}

 

R.layout.vw_xscrollview_layout 该布局文件的内部,头部与顶部的咱们先不用管,就看中间的,ID值为content_layout,默认我们的自定义布局是放置嵌套在其中的

<?xml version="1.0"encoding="utf-8"?>
 
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
   android:orientation="vertical"
   android:layout_width="match_parent"
   android:layout_height="match_parent">
 
   <LinearLayout
       android:id="@+id/header_layout"
       android:layout_gravity="center_horizontal|top"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:orientation="vertical" />
 
   <LinearLayout
       android:id="@+id/content_layout"
       android:layout_gravity="center"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:orientation="vertical" />
 
   <LinearLayout
       android:id="@+id/footer_layout"
       android:layout_gravity="center_horizontal|bottom"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:tag="ttttt"
       android:orientation="vertical" />
 
</LinearLayout>


public void setContentView(ViewGroupcontent) {
       if (mLayout == null)
           return;
       if (mContentLayout == null)
           mContentLayout = (LinearLayout)mLayout.findViewById(R.id.content_layout);
       
       if (mContentLayout.getChildCount() > 0)
           mContentLayout.removeAllViews();
       mContentLayout.addView(content);
    }
 
   public void setView(View content) {
       if (mLayout == null)
           return;
       if (mContentLayout == null)
           mContentLayout = (LinearLayout)mLayout.findViewById(R.id.content_layout);
       mContentLayout.addView(content);
}


外部引入 ,设置内容的函数有两个,setContentView,setView

View content =LayoutInflater.from(this).inflate(R.layout.vw_scroll_view_content, null);
scrollview.setContentView()content;

 

下面的布局文件还是用一个使用XScrollView的布局文件,内容布局也放置在该文件中,但是跟XScrollView就不是父子的关系,而是同级的,ID值 xcollview_content,就是内容布局,接下来就看代码的

<?xml version="1.0"encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:id="@+id/test_parent"
   android:layout_width="match_parent"
   android:layout_height="match_parent" >
 
   <com.markmao.pulltorefresh.widget.XScrollView
       android:id="@+id/scroll_view"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:layout_below="@id/page_top"
       android:fillViewport="true"
       android:scrollbars="none" >
   </com.markmao.pulltorefresh.widget.XScrollView>
 
    <LinearLayout
       android:id="@+id/xcollview_content"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:layout_below="@id/scroll_view"
       android:background="@color/transparent"
       android:orientation="vertical" >
 
       <ListView
           android:id="@+id/content_list"
           android:layout_width="match_parent"
           android:layout_height="match_parent"
           android:cacheColorHint="#00000000"
           android:scrollbars="none" />
   </LinearLayout>
 
</RelativeLayout>


代码变动,在XScrollView中新增函数 ,需要注意的一个空间它只允许有一个父控件,到此步就结束了第一个问题

public void setDView(View content) {
       if (mLayout == null)
           return;
       if (mContentLayout == null)
           mContentLayout = (LinearLayout)mLayout.findViewById(R.id.content_layout);
 
       ViewParent parent = this.getParent();
       if (parent instanceof RelativeLayout) {
           RelativeLayout r_parent = (RelativeLayout) parent;
           r_parent.removeView(content);
       }
       if (parent instanceof LinearLayout) {
           LinearLayout l_parent = (LinearLayout) parent;
           l_parent.removeView(content);
       }
       mContentLayout.addView(content);
}


以上!另外对APP进行全方位的检测,我都会用这个:www.ineice.com


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值