Android бесконечный список

Если Вы не настроены против выполнения его, можно импортировать блок J# "vjslib.dll" и использовать Arrays.equals (байт [], байт []) метод ...

не обвиняют меня, если кто-то смеется над Вами хотя...

РЕДАКТИРОВАНИЕ: Поскольку, что мало это стоит, я использовал Отражатель для разборки кода для этого, и здесь - то, на что это похоже:

public static bool equals(sbyte[] a1, sbyte[] a2)
{
  if (a1 == a2)
  {
    return true;
  }
  if ((a1 != null) && (a2 != null))
  {
    if (a1.Length != a2.Length)
    {
      return false;
    }
    for (int i = 0; i < a1.Length; i++)
    {
      if (a1[i] != a2[i])
      {
        return false;
      }
    }
    return true;
  }
  return false;
}

231
задан tshepang 8 February 2014 в 03:27
поделиться

2 ответа

Одним из решений является реализация OnScrollListener и внесение изменений (например, добавление элементов и т. Д.) В ListAdapter в удобном состоянии в его метод onScroll .

Следующий ListActivity показывает список целых чисел, начиная с 40, добавляя элементы, когда пользователь прокручивает список до конца.

public class Test extends ListActivity implements OnScrollListener {

    Aleph0 adapter = new Aleph0();

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setListAdapter(adapter); 
        getListView().setOnScrollListener(this);
    }

    public void onScroll(AbsListView view,
        int firstVisible, int visibleCount, int totalCount) {

        boolean loadMore = /* maybe add a padding */
            firstVisible + visibleCount >= totalCount;

        if(loadMore) {
            adapter.count += visibleCount; // or any other amount
            adapter.notifyDataSetChanged();
        }
    }

    public void onScrollStateChanged(AbsListView v, int s) { }    

    class Aleph0 extends BaseAdapter {
        int count = 40; /* starting amount */

        public int getCount() { return count; }
        public Object getItem(int pos) { return pos; }
        public long getItemId(int pos) { return pos; }

        public View getView(int pos, View v, ViewGroup p) {
                TextView view = new TextView(Test.this);
                view.setText("entry " + pos);
                return view;
        }
    }
}

Очевидно, вам следует использовать отдельные потоки для длительных действий (таких как загрузка веб-данных) и могут захотеть указать прогресс в последнем элементе списка (как это делают приложения Market или Gmail).

268
ответ дан 23 November 2019 в 03:37
поделиться

Вы можете определить конец списка с помощью onScrollListener , рабочий код представлен ниже:

@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
    if (view.getAdapter() != null && ((firstVisibleItem + visibleItemCount) >= totalItemCount) && totalItemCount != mPrevTotalItemCount) {
        Log.v(TAG, "onListEnd, extending list");
        mPrevTotalItemCount = totalItemCount;
        mAdapter.addMoreData();
    }
}

Другой способ сделать это (внутри адаптера):

    public View getView(int pos, View v, ViewGroup p) {
            if(pos==getCount()-1){
                addMoreData(); //should be asynctask or thread
            }
            return view;
    }

Имейте в виду, что это метод будет вызываться много раз, поэтому вам нужно добавить еще одно условие для блокировки нескольких вызовов addMoreData () .

Когда вы добавляете все элементы в список, вызовите notifyDataSetChanged () внутри вашего адаптера, чтобы обновить представление (он должен запускаться в потоке пользовательского интерфейса - runOnUiThread )

20
ответ дан 23 November 2019 в 03:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: