2013-02-08 107 views
5

我有一個使用dinamically加載內容的scrollView。有時可能會有很多內容,所以我想在用戶滾動到底時加載更多內容。當ScrollView滾動到底部時加載更多數據

我searced合適metods發現兩個:

onScrollChanged() 

getScrollY() 

但我不知道如何使用它爲我的目的。 請給我一些建議。

+3

爲什麼不使用'ListView'?這就是它的作用 – codeMagic 2013-02-08 14:12:55

+0

我需要一些listview不允許的視圖配置。 (如pinterest顯示照片) – TpoM6oH 2013-02-08 14:22:33

+0

我不使用pinterest,所以我不知道他們的佈局,但我正在處理一些東西,可以讓你拍照並在列表視圖中顯示它。就像海綿寶寶說的,任何事情都可能與想象力,是的,我有孩子:) – codeMagic 2013-02-08 14:27:54

回答

6

我認爲更好的方法是使用ListView。但如果你只需要ScrollView

首先您解決您的ScrollView的門檻高度,因此無論何時跨越這個限制負荷新的數據&追加到ScrollView &重置您的門檻高度。

這是你可以嘗試..

創建一個定製的ScrollView這樣。

public class ObservableScrollView extends ScrollView 
{ 

    private ScrollViewListener scrollViewListener = null; 

    public ObservableScrollView(Context context) 
    { 
     super(context); 
    } 

    public ObservableScrollView(Context context, AttributeSet attrs, int defStyle) 
    { 
     super(context, attrs, defStyle); 
    } 

    public ObservableScrollView(Context context, AttributeSet attrs) 
    { 
     super(context, attrs); 
    } 

    public void setScrollViewListener(ScrollViewListener scrollViewListener) 
    { 
     this.scrollViewListener = scrollViewListener; 
    } 

    @Override 
    protected void onScrollChanged(int x, int y, int oldx, int oldy) 
    { 
     super.onScrollChanged(x, y, oldx, oldy); 
     if (scrollViewListener != null) 
     { 
      scrollViewListener.onScrollChanged(this, x, y, oldx, oldy); 
     } 
    } 

} 

&然後創建一個接口

public interface ScrollViewListener 
{ 
    void onScrollChanged(ObservableScrollView scrollView, int x, int y, int oldx, int oldy); 
} 

&你的XML佈局應該是這樣的

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <com.solve.stackoverflow.ObservableScrollView 
     android:id="@+id/endless_scrollview" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" > 

     <LinearLayout 
      android:id="@+id/endless_scrollview_layout" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:orientation="vertical" /> 
    </com.solve.stackoverflow.ObservableScrollView> 

</LinearLayout> 

&最後使用所有這些在你的活動

public class EndLessActivity extends Activity implements ScrollViewListener 
{ 
    ObservableScrollView scrollView; 
    LinearLayout layout; 

    int threshold = 20; //Setting threshold 

    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.endless_scrollview); 
     scrollView = (ObservableScrollView) findViewById(R.id.endless_scrollview); 
     layout = (LinearLayout) findViewById(R.id.endless_scrollview_layout); 
     scrollView.setScrollViewListener(this); 
     appendData(); 
    } 

    @Override 
    public void onScrollChanged(ObservableScrollView scrollView, int x, int y, int oldx, int oldy) 
    { 
     // TODO Auto-generated method stub 
     if (y > threshold) 
      appendData(); 
    } 

    void appendData() 
    { 
     for (int i = 0; i < 15; i++) 
     { 
      threshold += 10;//Reseting threshold. 
      TextView tv = new TextView(this); 
      tv.setBackgroundResource(R.drawable.ic_launcher); 
      layout.addView(tv); 
     } 
    } 
} 

試試這個&讓我知道,它是否解決你的問題。

感謝

11

滾動視圖不提供任何方法來檢查,如果你已經達到了視圖的底部,所以最好的方法是延長與滾動視圖自己的自定義視圖。這是我在我的應用程序中實現的方式。

步驟1:創建用於滾動視圖的自定義類

public class ObservableScrollView extends ScrollView { 

private ScrollViewListener scrollViewListener = null; 

public ObservableScrollView(Context context) { 
    super(context); 
} 

public ObservableScrollView(Context context, AttributeSet attrs, int defStyle) { 
    super(context, attrs, defStyle); 
} 

public ObservableScrollView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
} 

public void setScrollViewListener(ScrollViewListener scrollViewListener) { 
    this.scrollViewListener = scrollViewListener; 
} 

@Override 
protected void onScrollChanged(int x, int y, int oldx, int oldy) { 

    View view = (View) getChildAt(getChildCount() - 1); 
    int diff = (view.getBottom() - (getHeight() + getScrollY())); 
    if (diff == 0) { // if diff is zero, then the bottom has been reached 
     if (scrollViewListener != null) { 
      scrollViewListener.onScrollEnded(this, x, y, oldx, oldy); 
     } 
    } 
    super.onScrollChanged(x, y, oldx, oldy); 
} 

}

步驟2:創建一個滾動視圖監聽器接口

public interface ScrollViewListener { 

void onScrollEnded(ObservableScrollView scrollView, int x, int y, int oldx, int oldy); 



} 

步驟3:在佈局中添加視圖

<com.platinumapps.facedroid.ObservableScrollView 
     android:id="@+id/scrollView" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" > 
    </com.platinumapps.facedroid.ObservableScrollView> 

第4步:實現該接口在類

public class MyFragment extends Fragment implements ScrollViewListener 

@Override 
public void onScrollEnded(ObservableScrollView scrollView, int x, int y, int oldx, int oldy) { 

      //Perform your action 
} 

和你做

+0

無法獲取diff 0直接獲得差異小於0 – 2015-03-05 07:39:10

相關問題