Бесконечный ListView в HorizonzalScrollView в Android - PullRequest
3 голосов
/ 23 августа 2011

Я занимаюсь разработкой приложения для Android, и одним из вариантов его использования является отображение следующей ситуации.

  1. У меня есть список ссылок (L). Каждая из этих ссылок является URL для картинка в интернете
  2. Мне нужно загрузить каждое изображение (L) и отобразить его в ListView. Там должно быть две строки в ListView, где я могу вставить картинки. Я хочу сделать что-то похожее на это приложение ;
  3. Мне нужно отобразить картинки в HorizontalScrollView;
  4. Картинки нужно загружать по запросу, другими словами, я просто загрузить изображение, используя поток, когда HorizontalScrollView в положении, которое показывает эту картинку (похоже на это ситуация ).

Мои вопросы:

  1. Можно ли вставить ListView в HorizontalScrollView? (Если да, как мне это сделать?)
  2. Как использовать HorizontalScrollView? Я имею в виду, есть ли разница в том, как я использую ListView внутри ScrollView?

  3. Знаете ли вы какой-либо плагин / проект, который имеет те же цели?

Ответы [ 3 ]

2 голосов
/ 25 августа 2011

Вопрос 1 - Возможно, вам следует переосмыслить свой дизайн, чтобы использовать список HorizonzalListView .
Вопрос 2 - Вы можете программно создать список HorizontialListView, поместив их в LinearLayout, обернутый вертикальной прокруткой.

Ваш макет myhlist.xml:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent">

  <LinearLayout android:id="@+id/list_of_hlist_placeholder"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_gravity="center_horizontal"/>

</ScrollView>

Ваша активность:

public class ListOfHListlActivity extends Activity {

/** List of ArrayAdapter with each bind to a HorizontialListView created programmatically */
private List<MyAdapter> myAdapters = new ArrayList<MyAdapter>();
/** List of your data model */
private List<Object> myDataList;

/**
 * Worker thread running in background doing dirty job.
 */
private class DoDirtyJobAsyncTask extends AsyncTask<Void, MyAdapter, Void> {

    @Override
    protected Void doInBackground(Void... params) {
    // do your dirty job here, to populate myDataList
        for (Object myData : myDataList) {
            MyAdapter myAdapter = new MyAdapter(myData);
            myAdapters.add(myAdapter);
            publishProgress(myAdapter);
        }
        return null;
    }

    @Override
    protected void onProgressUpdate(MyAdapter... myAdapters) {
        int currViewId = 1;
        for (final MyAdapter myAdapter: myAdapters) {
            HorizontialListView listview = new HorizontialListView(getApplicationContext(), null);
            listview.setId(currViewId);
            listview.setAdapter(myAdapter);
            listview.setOnItemClickListener(new OnItemClickListener() {
                public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
                // I am clickable.
                }
            });

            RelativeLayout listOfHListLayout = (RelativeLayout) findViewById(R.id.list_of_hlist_placeholder);
            // don't forget set height here, you know the height issue in HorizontialListView
            RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(
                    RelativeLayout.LayoutParams.FILL_PARENT, 40);
            listOfHListLayout.addView(listview, layoutParams);
            currViewId++;
        }
    }

}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    new DoDirtyJobAsyncTask().execute();
    setContentView(R.layout.myhlist);
}

}

1 голос
/ 23 августа 2011

Вас может заинтересовать этот проект http://www.dev -smart.com / archives / 34 В нем рассказывается о реализации горизонтального ListView в Android без блокировки по центру виджета Галерея

0 голосов
/ 22 июля 2015

Возможно, уже слишком поздно, но теперь у Android есть RecylerView , который намного эффективнее, чем Listview, а также поддерживает горизонтальную прокрутку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...