浅析: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

时间: 2024-12-24 01:49:04

浅析:Pulltorefresh使用中碰到的问题的相关文章

谈一谈flex布局使用中碰到的一些问题

起因 工作以后由于大量使用到了flex布局而碰到了一些尚不清楚的问题,以及一些有意思的特性,在此写篇博客记录一下. flex三个值的含义 众所周知,flex布局所有的属性有两种:一种作用在弹性容器(Flex container)上,一种作用在弹性项目(Flex item)上,而flex就是作用在弹性项目上的属性. flex 是 flex-grow.flex-shrink.flex-basis 三个值的简写,这个值规定了弹性项目如何伸长或压缩以适应弹性容器中的可用空间. flex-grow 定义弹

android studio使用中碰到Failure [INSTALL_FAILED_OLDER_SDK] 问题

第一次使用Android studio开发.直接新建一个默认项目运行出现:Failure [INSTALL_FAILED_OLDER_SDK] , 网上很多人说修改build.gradle中的minsdkversion的版本号. 但是没用 解决办法: FIle - Project Structure 如图 将Compile SDK Version 改为合适的版本,这样做会使得build.gradle中compileSdkVersion对应得到改变,如下图 ,但是我们还差一步,    还得手动修改

IOS block使用中碰到的一个小坑

1.先上段代码       __block typeof(self) tmpSelf = self; [tableview addLegendHeaderWithRefreshingBlock:^(){ [ tmpSelf initData:NO]; }]; 写的时候没怎么注意,后面测试的时候发现每次push到这个页面的时候内存就不断增大,而且比较有规律,考虑是内存泄露了,用静态和动态分析没发现有 内存泄露,但是内存就是不断的增长,后面一想是不是没释放,断点下dealloc发现果然没执行,然后各

phpmyadmin使用中碰到的一些问题

在导入数据库文件的时候出现 #1062 – Duplicate entry '1′ for key ‘PRIMARY' 说明在上一次的导入中没有完全导入,但是主键是自增的,所以要输入主键才能继续,解决办法就是将数据库删除之后进行重新导入. 这样的问题一般都说明导入的数据库文件不是完整的数据库文件,需要再次重新导出数据库文件. 在导入数据库的时候如果出现类似#1064 - You have an error in your SQL syntax; 解决办法就是打开准备导出的数据库文件查看提示的地方

JS使用中碰到的一些问题

settimeout: 1.setTimeout(function () {//这个则会在1秒后进行弹出1 alert(1); }, 1000); 2.setTimeout(alert(1), 1000);//这个在js中不会等待1秒,就会直接出来弹出1 setTimeout(function () { alert(1); }, 1000); setTimeout(alert(1), 1000);

cordova + ionic 使用中碰到的一些问题

1.No Content-Security-Policy meta tag found. Please add one when using the cordova-plugin-whitelist plugin.解决办法index.html 中添加<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src

LINQ使用中碰到的问题------按时间分组

问题: LINQ按时间分组(想按天统计)计算count,时间是带了时分秒的,转string的时候会保错 解决办法: 换一种思维,将所有的时间时分秒都重置成00,可以使用到方法 DbFunctions.TruncateTime(p.CreateDateTime) 原文地址:https://www.cnblogs.com/LiCoco/p/9755698.html

contentHorizontalAlignment 属性浅析

转载自:http://blog.csdn.net/s0228g0228/article/details/46832285 最近在iOS 7以上总是碰到导航条上左右按钮距离边距太大的问题 为了解决这个这个问题 特别使用了setImageEdgeInsets 和 使用中碰到的范二的事情总结下:警示他人 1.setImageEdgeInsets针对的是UIbutton的setImage方法.如果使用setbackimage方法.则会失效无用. 2.btn.contentHorizontalAlignm

使用插件bootstrap-table实现表格记录的查询、分页、排序等处理

在业务系统开发中,对表格记录的查询.分页.排序等处理是非常常见的,在Web开发中,可以采用很多功能强大的插件来满足要求,且能极大的提高开发效率,本随笔介绍这个bootstrap-table是一款非常有名的开源表格插件,在很多项目中广泛的应用.Bootstrap-table插件提供了非常丰富的属性设置,可以实现查询.分页.排序.复选框.设置显示列.Card view视图.主从表显示.合并列.国际化处理等处理功能,而且该插件同时也提供了一些不错的扩展功能,如移动行.移动列位置等一些特殊的功能,插件可