Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> Pulltorefresh使用中碰到的問題,pulltorefresh碰到

Pulltorefresh使用中碰到的問題,pulltorefresh碰到

編輯:關於android開發

Pulltorefresh使用中碰到的問題,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 ScrollView implements 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"?>

<LinearLayout xmlns: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(ViewGroup content) {
        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); }

 

 

 

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved