При создании вложенного списка ExpandableRecyclerView у меня возникли проблемы.
Список будет содержать валютные пары бирж криптовалют. Для парсинга данных я использую библиотеку retrofit. Список будет выглядеть примерно так
В данном случай я парсил данные из сайтов (бирж) exmo.com и okex.com (Для наглядности я добавил данные вручную). Но, проблема в том, что я хочу парсить валютные пары из 40-50 бирж(сайтов) и в любой момент биржы могут добавить новую валютную пару. Если загружать в OnCreate все данные, то программа может зависать на 2-3 минуты. Я не хочу загружать все данные(хочу сэкономить трафик), я хочу, чтобы при событии setOnGroupExpandCollapseListener т,е когда сворачиваем конкретную группу загрузились валютные пары только этой группы (биржи). Как мне этого добиться??? После того как я присваиваю адаптер ресайклеру добавить что-то в группу или в подгруппу не получается. Я использую библиотеку https://github.com/thoughtbot/expandable-recycler-view/tree/master/expandablecheckrecyclerview/src/main/java/com/thoughtbot/expandablecheckrecyclerview
Мой код MainActivity
public class CryptoCurrencyExpandableListActivity extends AppCompatActivity {
private MultiCheckGroupAdapter adapter;
RecyclerView recyclerView;
List<MultiCheckGroup> groupList = new ArrayList<>();
List<Currency> addCurOKEx = new ArrayList<>();
List<Currency> addCurExmo = new ArrayList<>();
List<CurrencyOKEx> currencyList = new ArrayList<>();
boolean thread = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_crypto_currency_expandable_list);
recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(layoutManager);
addCurExmo.add(new Currency("BTC-USD"));
addCurExmo.add(new Currency("LTC-BTC"));
addCurOKEx.add(new Currency("BTC-USD"));
addCurOKEx.add(new Currency("ETH-TUSD"));
groupList.add(new MultiCheckGroup("EXMO.com", addCurExmo));
groupList.add(new MultiCheckGroup("OKEx.com", addCurOKEx));
adapter = new MultiCheckGroupAdapter(groupList);
recyclerView.setAdapter(adapter);
}
код Адаптера
package com.example.currencycalc;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.thoughtbot.expandablecheckrecyclerview.CheckableChildRecyclerViewAdapter;
import com.thoughtbot.expandablecheckrecyclerview.models.CheckedExpandableGroup;
import com.thoughtbot.expandablerecyclerview.models.ExpandableGroup;
import java.util.List;
public class MultiCheckGroupAdapter extends
CheckableChildRecyclerViewAdapter<MultiCheckGroupViewHolder, MultiCheckCurrencyViewHolder> {
public MultiCheckGroupAdapter(List<MultiCheckGroup> groups) {
super(groups);
}
@Override
public MultiCheckCurrencyViewHolder onCreateCheckChildViewHolder(ViewGroup parent, final int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.expandable_recycler_view_currency, parent, false);
return new MultiCheckCurrencyViewHolder(view);
}
@Override
public void onBindCheckChildViewHolder(MultiCheckCurrencyViewHolder holder, int position,
CheckedExpandableGroup group, int childIndex) {
final Currency artist = (Currency) group.getItems().get(childIndex);
holder.setCurrencyName(artist.getName());
}
@Override
public MultiCheckGroupViewHolder onCreateGroupViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.expandable_recycler_view_group, parent, false);
return new MultiCheckGroupViewHolder(view);
}
@Override
public void onBindGroupViewHolder(MultiCheckGroupViewHolder holder, int flatPosition,
ExpandableGroup group) {
holder.setGroupTitle(group);
}
}
Почитайте про работу со списками, после добавления данных используйте notifyDataSetChanged(). Лучше для этих целей использовать DiffUtils, но это нужно вам будет после того как вы научитесь пользоваться списками и адаптером. Дальше, у вас есть список бирж, как я понимаю он нигде не хранится на внешнем источники, значит этот момент хардкодим, способов множество от хранения в строковых ресурсах, до БД путешествующей с вашим апп, зависит от целей и уровня извращённости. Данная библиотека содержит слушатель на открытие, закрытие списка (свернуть/развернуть):
adapter.setOnGroupExpandCollapseListener(new GroupExpandCollapseListener() {
@Override
public void onGroupExpanded(ExpandableGroup group) {
}
@Override
public void onGroupCollapsed(ExpandableGroup group) {
}
});
в зависимости от того как вы работаете с биржами и реализуете их список, но в обьекте из каждого элемента храните ссылку на биржу, которую вы потом передадите Ретрофиту. Далее на развертывание списка, вешаете (реализовываете) вышеуказанный слушатель и просто вызываете вашу подгрузку данных. Пришедший ответ парсите и через добавление данных в список обновляете его. На время подгрузки данных лучше показывать юзеру прогресс бар или в списке или полностью через перекритие всего интерфейса (не совсем верный способ, но самый простой и понятный).
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
уважаемые! В AsyncTask получаю JSON данные по REST с сервера, обрабатываю с помощью Jackson и отправляю это в ListView
Нужна помощь, кто чем может,нужно реализовать функцию, которая будет вычислять количество размещений из n по m , спасибо
Естьtxt файл, он должен с помощью кода очищаться, и после очищения в него нужно записать новую информацию
Пытаюсь запустить minecraft сервер на Debian 8, но при запуске возникает ошибка: pastebin