ArrayAdapter для веб-просмотра внутри Gridview - PullRequest
3 голосов
/ 28 января 2012

Исходя из более раннего вопроса, я пытаюсь получить несколько (виджеты или в данном случае WebView s) внутри GridView.

Так что я не был уверен, как поступить, сделать ли собственный адаптер (в то время казавшийся страшным) или создать ArrayAdapter<WebView>.

Я не был уверенесли ArrayAdapter может принять его таким образом или если он поддерживает только примитивные типы.

GridView contentGrid;
LinearLayout contentLayout;

WebWidget[] webWidgets;

WebWidget web1;
WebWidget web2;
WebWidget web3;

@Override
public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    web1 = new WebWidget(this, "http://www.google.ie");
    web2 = new WebWidget(this, "http://www.facebook.com");
    web3 = new WebWidget(this, "http://www.youtube.ie");

    webWidgets = new WebWidget[]{web1,web2,web3};

    contentGrid = (GridView) findViewById(R.id.contentGrid);

           //Heres my attempt at an adapter for webview
    ArrayAdapter<WebView> adapter = new ArrayAdapter<WebView>(this,
            android.R.layout.simple_list_item_1, webWidgets);

    contentGrid.setAdapter(adapter);

К сожалению, получается строковая версия WebView.

Итак, вопрос в том, могу ли я сделать это таким образом, или мне лучше создать свой собственный CustomAdapter?

ПРИМЕЧАНИЕ. Может ли кто-нибудь указать некоторую информацию относительно второй переменной конструктора?IE android.R.layout.simple_list_item_1

1 Ответ

1 голос
/ 29 января 2012

Независимо от того, как вы реализуете Adapter, вы не можете надежно размещать прокручиваемые виджеты в других прокручиваемых виджетах, по крайней мере там, где они прокручиваются в том же направлении.Поскольку и WebView, и GridView прокручивают по вертикали, вы получите ненадежные результаты, пытаясь объединить их таким образом.

При этом на некоторые ваши утверждения и вопросы:

Я не был уверен, что ArrayAdapter может принять его таким образом или поддерживает только примитивные типы.

ArrayAdapter может адаптировать массив Java или ArrayList любого типа данных, который вынапример.

К сожалению, получается строковая версия веб-просмотра ... ПРИМЕЧАНИЕ. Может ли кто-нибудь указать некоторую информацию относительно второй переменной конструктора?IE android.R.layout.simple_list_item_1

Вторая переменная конструктора - это то, как вы хотите, чтобы ячейки в вашем GridView были похожи.В вашем случае вы указываете встроенный ресурс макета, который является TextView.Следовательно, вы говорите Android, что хотите, чтобы все ваши ячейки сетки были TextView виджетами.Android будет вызывать toString() для объектов в вашем массиве, вылить этот результат в TextView, и TextViews войдет в ваши ячейки сетки.

Если вы хотите, чтобы ваш ArrayAdapter возвращалкроме TextView, вам нужно будет переопределить getView() и самостоятельно обрабатывать больше, возможно, используя файл макета вашего собственного создания.

Так что вопрос в том, могу ли я сделать это такили мне лучше сделать свой собственный CustomAdapter?

Как уже отмечалось в начале моего ответа, то, что вы хотите, просто не будет работать надежно.

Делая вид, что сейчасWebViews в GridView сработает, самое простое решение - переопределить getView() в вашем собственном подклассе ArrayAdapter, как я упоминал ранее.Вот бесплатный отрывок из одной из моих книг , посвященный этому процессу.

...