2013-02-08 2 views
5

У меня есть scrollView с динамически загружаемым контентом. Иногда может быть много контента, поэтому я бы хотел загрузить больше, когда пользователь прокручивается вниз.Загрузите дополнительные данные, когда ScrollView прокручивается в конец

I searced подходящего metods и нашел два:

onScrollChanged() 

и

getScrollY() 

Но я не знаю, как использовать его для своих целей. Пожалуйста, дайте мне несколько советов.

+3

Почему бы не использовать 'ListView'? Это то, что он делает – codeMagic

+0

Мне нужна некоторая конфигурация представлений, которую listview не разрешает. (Показать фотографии, похожие на pinterest) – TpoM6oH

+0

Я не использую pinterest, поэтому я не знаю их компоновки, но сейчас я что-то работаю над тем, что позволяет делать снимок и отображать его в списке. Как говорит SpongeBob, все возможно с фантазией, да у меня есть дети :) – codeMagic

ответ

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 получить diff напрямую меньше 0 –

Смежные вопросы