我有一個使用dinamically加載內容的scrollView。有時可能會有很多內容,所以我想在用戶滾動到底時加載更多內容。當ScrollView滾動到底部時加載更多數據
我searced合適metods發現兩個:
onScrollChanged()
和
getScrollY()
但我不知道如何使用它爲我的目的。 請給我一些建議。
我有一個使用dinamically加載內容的scrollView。有時可能會有很多內容,所以我想在用戶滾動到底時加載更多內容。當ScrollView滾動到底部時加載更多數據
我searced合適metods發現兩個:
onScrollChanged()
和
getScrollY()
但我不知道如何使用它爲我的目的。 請給我一些建議。
我認爲更好的方法是使用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);
}
}
}
試試這個&讓我知道,它是否解決你的問題。
感謝
滾動視圖不提供任何方法來檢查,如果你已經達到了視圖的底部,所以最好的方法是延長與滾動視圖自己的自定義視圖。這是我在我的應用程序中實現的方式。
步驟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
}
和你做
無法獲取diff 0直接獲得差異小於0 – 2015-03-05 07:39:10
爲什麼不使用'ListView'?這就是它的作用 – codeMagic 2013-02-08 14:12:55
我需要一些listview不允許的視圖配置。 (如pinterest顯示照片) – TpoM6oH 2013-02-08 14:22:33
我不使用pinterest,所以我不知道他們的佈局,但我正在處理一些東西,可以讓你拍照並在列表視圖中顯示它。就像海綿寶寶說的,任何事情都可能與想象力,是的,我有孩子:) – codeMagic 2013-02-08 14:27:54