Страница 1 из 1

setAdapter()

Добавлено: 03 апр 2014, 13:48
widg

Код: Выделить всё


import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import java.io.IOException;
import java.util.ArrayList;


public class MainActivity extends Activity {

    // благодоря этому классу мы будет разбирать данные на куски
    public Elements title;
    public Elements published;
    // то в чем будем хранить данные пока не передадим адаптеру
    public ArrayList<String> titleList = new ArrayList<String>();
    // Listview Adapter для вывода данных
    private ArrayAdapter<String> adapter;
    // List view
    private ListView lv;
    //private ListView lv2;
    public ArrayList<String> subitem = new ArrayList<String>();
    private ArrayAdapter<String> adapter2;


    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        // определение данных
        lv = (ListView) findViewById(R.id.listView1);
        //lv2 = (ListView) findViewById(R.id.listView1);
        // запрос к нашему отдельному поток на выборку данных
        new NewThread().execute();
        // Добавляем данные для ListView
        adapter = new ArrayAdapter<String>(this, R.layout.list_item, R.id.titleitem, titleList);
        adapter2 = new ArrayAdapter<String>(this, R.layout.list_item, R.id.subitem, subitem);
    }

    public void refresh(View v){
        new NewThread().execute();
    }
    /** А вот и внутрений класс который делает запросы, если вы не читали статьи у меня в блоге про отдельные
     * потоки советую почитать */
    public class NewThread extends AsyncTask<String, Void, String> {

        // Метод выполняющий запрос в фоне, в версиях выше 4 андроида, запросы в главном потоке выполнять
        // нельзя, поэтому все что вам нужно выполнять - выносите в отдельный тред
        @Override
        protected String doInBackground(String... arg) {

            // класс который захватывает страницу
            Document doc;
            try {
                // определяем откуда будем воровать данные
                doc = Jsoup.connect("http://freelansim.ru/tasks?q=%5Bandroid%5D").get();
                // задаем с какого места, я выбрал заголовке статей
                title = doc.select(".task__title");
                published = doc.select(".params__published-at");

                // чистим наш аррей лист для того что бы заполнить
                titleList.clear();
                subitem.clear();
                // и в цикле захватываем все данные какие есть на странице
                // записываем в аррей лист
                for (Element titles : title){
                    titleList.add(titles.text());
                }
                for (Element publisheds : published){
                    subitem.add(publisheds.text());
                }

            } catch (IOException e) {
                e.printStackTrace();
            }
            // ничего не возвращаем потому что я так захотел)
            return null;
        }

        @Override
        protected void onPostExecute(String result) {

            // после запроса обновляем листвью

            lv.setAdapter(adapter);
            //lv.setAdapter(adapter2);
        }
    }
}
помогите с lv.setAdapter(adapter); как обновить сразу два листвью, если раскомментирловать //lv.setAdapter(adapter2); то будет отображаться только subitem а первой части нету?

Re: setAdapter()

Добавлено: 03 апр 2014, 13:53
klblk
[syntax=java]lv = (ListView) findViewById(R.id.listView1);
//lv2 = (ListView) findViewById(R.id.listView1); [/syntax]

lv и lv2 один и тот же ListView.
ну и собственно совершенно непонятно что вы желаете получить, и зачем вообще ListView 2 адаптера?

Re: setAdapter()

Добавлено: 03 апр 2014, 13:56
widg
Да, я просто уже всяко попробовал.

Код: Выделить всё

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

    <!-- Строки которые будут в списке-->
    <TextView android:id="@+id/titleitem"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:padding="10dip"
        android:textSize="16dip"
        android:textStyle="bold"/>
    <TextView android:id="@+id/subitem"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:padding="10dip"
        android:textSize="12dip"
        android:textStyle="bold"/>

</LinearLayout>
вот строка состоит из titleitem и subitem

Re: setAdapter()

Добавлено: 03 апр 2014, 19:39
widg
Вообщем как в один адаптер запихать две строки?
Думал что то вроде этого

Код: Выделить всё

adapter = new ArrayAdapter<String>(this,
                R.layout.list_item, new String[]{
                String.valueOf(titleList),
                String.valueOf(subitem)
                }, new int[]{
                R.id.titleitem,
                R.id.subitem,});
Но что то в андройн студио всё подчёркивает красным

Re: setAdapter()

Добавлено: 04 апр 2014, 06:11
klblk
Нужен кастомный адаптер. Есть урок на эту тему.

Re: setAdapter()

Добавлено: 04 апр 2014, 12:44
widg

Код: Выделить всё

        adapter = new ArrayAdapter<String>(this,
                R.layout.list_item,
                new String[]{titleList, subitem},
                new int[]{R.id.titleitem, R.id.subitem,});
    }
Почему подчёркивает titleList, subitem и ругается на тип: Error:(49, 30) error: incompatible types
required: String
found: ArrayList<String>

определены

Код: Выделить всё

    // то в чем будем хранить данные пока не передадим адаптеру
    public ArrayList<String> titleList = new ArrayList<String>();
    public ArrayList<String> subitem = new ArrayList<String>();

Re: setAdapter()

Добавлено: 04 апр 2014, 12:55
klblk
ну и зачем вам в массив строк пихать два ArrayList'а?

Re: setAdapter()

Добавлено: 04 апр 2014, 12:58
widg
klblk писал(а):ну и зачем вам в массив строк пихать два ArrayList'а?
а как правильно?
Я вот тут подглядел
http://megadarja.blogspot.ru/2010/07/android.html

Не могу сообразить что такое кастомный адаптер, как у меня не гуглится

Re: setAdapter()

Добавлено: 04 апр 2014, 13:35
widg
Наконец то нашёл то что искал, спасибо!
http://developer.alexanderklimov.ru/and ... dapter.php

Re: setAdapter()

Добавлено: 04 апр 2014, 13:43
klblk
тут вопрос не в правильности/неправильности, а в невозможности подобной структуры.
не знаю каким вы там гуглом пользуетесь...
http://startandroid.ru/ru/uroki/vse-uro ... apter.html

И так и не было озвучено что вы желаете получить.