Пользовательский адаптер для 3 списков

У меня проблема с приложением, которое я пытаюсь создать. За последние несколько дней я много гуглил, но, похоже, не могу понять.

Цель состоит в том, чтобы иметь расширяемое представление списка для одного действия, которое имеет в общей сложности 12 вариантов. При выборе каждой из этих 12 опций пользователь переходит к одному и тому же макету, который имеет 3 вкладки (с названиями «Понедельник», «Среда», «Пятница»). Каждая вкладка имеет список. Все это работает для моего приложения до сих пор. Теперь я хочу, чтобы мой пользовательский адаптер заполнил эти 3 списка различными данными (которые я планирую жестко закодировать в приложении, а не кучей данных, поэтому не думайте, что это замедлит его), в зависимости от того, какой элемент в представлении расширяемого списка был нажат.

Проблема, с которой я сталкиваюсь, заключается в том, что я понятия не имею, как я могу сообщить пользовательскому адаптеру, какой элемент в расширяемом ListView был нажат, и я не знаю, как взять эту информацию и заполнить три разных списка в 3 разных вкладки с тремя разными наборами данных..

Данные очень просты, и все они очень похожи. Каждая строка будет иметь 3 текстовых поля, одно из которых содержит одно слово, а 2 — числа. Он также будет иметь флажок

Раньше я делал собственные адаптеры, но они предназначались для отдельных списков, и мне не нужно было разделять данные, так что это было намного проще. Я понятия не имею, как начать это, и мои попытки поиска в Google ни к чему не привели.

Любая помощь очень ценится, даже просто ссылка, указывающая мне правильное направление, была бы потрясающей! Спасибо!




Ответы (2)


Создайте 3 разных фрагмента для 3 вкладок, используя комбинацию (TabLayout + ViewPager).
Затем вызовите это в Activity, у которого есть доступ к этим TabLayout и ViewPager, затем добавьте вкладки динамически с помощью пользовательского просмотры списков. Вот оно, простое решение.

person Shadab K    schedule 24.07.2016

Вы можете использовать тот же CustomAdapter для заполнения любых данных, которые хотите. Таким образом, вместо того, чтобы жестко кодировать данные в вашем CustomAdapter, вы можете динамически устанавливать данные во время создания объекта.

Таким образом, когда вы создаете Adapter, вы передаете данные, которые он должен обрабатывать. Поскольку ваша активность знает, какой элемент раскрываемого списка был нажат, вы можете отправлять различные данные на свой адаптер.

public class MyCustomAdapter extends BaseAdapter {
    private String [] dataToBePopulated;

    public MyCustomAdapter(String [] data) {
        dataToBePopulated = data;
    }

    @Override
    public int getCount() {
        return dataToBePopulated != null ? dataToBePopulated.lenght : 0;
    }

    // ETC..
}

Затем, когда вы создаете адаптер, вы можете отправлять данные, которые хотите, например:

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle arg0) {
        super.onCreate(arg0);

        ....

        ListView listView = (ListView) findViewById(R.id.ID_OF_LISTVIEW);
        MyCustomAdapter listViewAdapter;
        if(/* CONDITION 1 */) {
            listViewAdapter = new MyCustomAdapter(new String[] {"Data1 for Condition 1", "Data2 for Condition 1", "Data3 for Condition 1"})
        } else if (/* CONDITION 2 */) {
            listViewAdapter = new MyCustomAdapter(new String[] {"Data1 for Condition 2", "Data2 for Condition 2"})
        } else {
            listViewAdapter = new MyCustomAdapter(new String[] {"Data1 for Condition 3"})
        }

        listView.setAdapter(listViewAdapter);

        ....            
    }

}
person W0rmH0le    schedule 24.07.2016