Урок 45. Список-дерево ExpandableListView
Re: Урок 45. Список-дерево ExpandableListView
наверно глупый вопрос. но где в коде урока видно как тот или иной элемент присваевается к той или иной группе? просто путем перечисления по порядку? первый блок элементов к первой группе, второй блок элементов ко второй группе?
Re: Урок 45. Список-дерево ExpandableListView
Arch1e писал(а):"А вообще вы можете создать для элементов свой layout, например, с тремя TextView. И к каждому элементу списка (Map) добавить еще по два атрибута: цена и цвет. Далее указываете ваш layout в конструкторе, формируете соответственно массивы childFrom и childTo чтобы сопоставить атрибуты и TextView, и получится, что каждый элемент группы содержит более подробную информацию о смартфоне."
Скиньте пожалуйста такой полный код урока
присоеденяюсь к просьбе. если не полный код, то хоть направления действия подробнее расписать. это бы добавило ясности в понимании урока
Re: Урок 45. Список-дерево ExpandableListView
Как по мне двойной список слишком тяжелый, чтобы находится в 45 уроке. Сначала нужно освоить обычные списки, адаптеры для них, в том числе и кастомные., а потом уже за такие штуки браться. Если не горит, то смело переходи к 46 уроку.
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
Re: Урок 45. Список-дерево ExpandableListView
Ребята, в конце урока написано
Добавляю в наш массив с коллецкиями коллекций еще цену, точно так же как добавляли модели телефонов.
Пишу свой примитивный item.xml для отображения. В нем два текстовых поля с id textView1 и textView2 соответственно
А теперь пытаюсь вывести
Но выводит оно только в текстовое поле textView1, поле textView2 оно заполняет пустотой.
Что я не так делаю?
Привожу кусок кода, как я это попытался реализовать:А вообще вы можете создать для элементов свой layout, например, с тремя TextView. И к каждому элементу списка (Map) добавить еще по два атрибута: цена и цвет. Далее указываете ваш layout в конструкторе, формируете соответственно массивы childFrom и childTo чтобы сопоставить атрибуты и TextView, и получится, что каждый элемент группы содержит более подробную информацию о смартфоне.
Код: Выделить всё
//добавил еще один массив с ценой
String[] prices = new String[]{"100","100","100","100","100","100","100","100","100","100","100"};
Код: Выделить всё
childDataItem = new ArrayList<Map<String,String>>();
for (String price : prices){
m = new HashMap<String,String>();
m.put("price",price);
childDataItem.add(m);
}
childData.add(childDataItem);
Код: Выделить всё
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="50dp">
<FrameLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_gravity="left|top">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Text"
android:id="@+id/textView1"
android:layout_gravity="left|center_vertical"
android:textSize="25dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Text"
android:id="@+id/textView2"
android:layout_gravity="right|center_vertical"
android:textSize="25dp" />
</FrameLayout>
</FrameLayout>
Код: Выделить всё
String childFrom[] = new String[]{"phoneName","price"};
int childTo[] = new int[]{R.id.textView1,R.id.textView2};
SimpleExpandableListAdapter adapter = new SimpleExpandableListAdapter(
this,
groupData,
android.R.layout.simple_expandable_list_item_1,
groupFrom,
groupTo,
childData,
R.layout.item,
childFrom,childTo
);
Что я не так делаю?
Re: Урок 45. Список-дерево ExpandableListView
я примерно так же пытался, только еще надо from - to настроить , но у меня все равно не вышло. а сорри проглядел, ты тоже это делал. ну вобщем я по предыдущему совету бросил и пошел дальше по урокам. может потом разберусь или кто тут подскажет ...
Re: Урок 45. Список-дерево ExpandableListView
В общем ,я так и не разобрался. Видимо особенности именно этого адаптера. В 49 уроке будет адаптер на два textview, там все почему-то работает.
Я просидел над этим уроком (45м), часа три. Перечитывал кучу раз, рисовал схемки что бы понять как оно все устроено в этом уроке, потому как нифига там не понятно разьяснено очень трудно вникнуть
Реально очень тяжелый урок, я не понимаю, что он тут делает, т.к последующие в разы легче. Может их как-то местами поменять бы?..
Выше уже написали, что урок можно пропустить если не понял. Полностью согласен.
Советую всем кто не может в него вникнуть, забить на него и читать дальше, через пару уроков все станет на свои места.
Я просидел над этим уроком (45м), часа три. Перечитывал кучу раз, рисовал схемки что бы понять как оно все устроено в этом уроке, потому как нифига там не понятно разьяснено очень трудно вникнуть
Реально очень тяжелый урок, я не понимаю, что он тут делает, т.к последующие в разы легче. Может их как-то местами поменять бы?..
Выше уже написали, что урок можно пропустить если не понял. Полностью согласен.
Советую всем кто не может в него вникнуть, забить на него и читать дальше, через пару уроков все станет на свои места.
-
- Сообщения: 15
- Зарегистрирован: 31 мар 2015, 15:17
Re: Урок 45. Список-дерево ExpandableListView
Очень плохо что в уроке используются системные переменнты в childTo и groupTo. Из-за этого он сложен для понимания. Кстати, у меня поличилось сделать 2 текст-вью описаным Вами способом. Все работает
Re: Урок 45. Список-дерево ExpandableListView
stas, Neustart, Arch1eА вообще вы можете создать для элементов свой layout, например, с тремя TextView. И к каждому элементу списка (Map) добавить еще по два атрибута: цена и цвет. Далее указываете ваш layout в конструкторе, формируете соответственно массивы childFrom и childTo чтобы сопоставить атрибуты и TextView, и получится, что каждый элемент группы содержит более подробную информацию о смартфоне.
Моя реализация, может кому поможет:
MainActivity:
Код: Выделить всё
public class MainActivity extends Activity {
String[] groups = new String[] {"HTC", "Samsung", "LG"};
String[] phonesHTC = new String[] {"Sensation", "Desire", "Wildfire", "Hero"};
String[] phonesSams = new String[] {"Galaxy S II", "Galaxy Nexus", "Wave", "Absolute"};
String[] phonesLG = new String[] {"Optimus", "Optimus Link", "Optimus Black", "Optimus One"};
String[] colors = new String[] {"Black", "Blue", "White", "Pink"};
String[] prices = new String[] {"400$", "350$", "500$", "200$"};
ArrayList<Map<String, String>> groupData;
ArrayList<Map<String, String>> childDataItem;
ArrayList<ArrayList<Map<String, String>>> childData;
// childData = ArrayList<childDataItem>
// список аттрибутов группы или элемента
Map<String, String> m;
ExpandableListView elvMain;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
elvMain = (ExpandableListView)findViewById(R.id.elvMain);
groupData = new ArrayList<Map<String, String>>();
for (String group : groups) {
m = new HashMap<String, String>();
m.put("groupName", group);
groupData.add(m);
}
String groupFrom[] = new String[]{"groupName"};
int groupTo[] = new int[] {android.R.id.text1};
childData = new ArrayList<ArrayList<Map<String, String>>>();
childDataItem = new ArrayList<Map<String, String>>();
// заполняем список аттрибутов для каждого элемента
for (int i = 0; i < phonesHTC.length; i++) {
m = new HashMap<String, String>();
m.put("phoneName", phonesHTC[i]);
m.put("colorName", colors[i]);
m.put("price", prices[i]);
childDataItem.add(m);
}
// добавляем в коллекцию коллекций
childData.add(childDataItem);
// создаем коллекцию элементов для второй группы
childDataItem = new ArrayList<Map<String, String>>();
for (int i = 0; i < phonesSams.length; i++) {
m = new HashMap<String, String>();
m.put("phoneName", phonesSams[i]);
m.put("colorName", colors[i]);
m.put("price", prices[i]);
childDataItem.add(m);
}
childData.add(childDataItem);
// создаем коллекцию элементов для третьей группы
childDataItem = new ArrayList<Map<String, String>>();
for (int i = 0; i < phonesLG.length; i++) {
m = new HashMap<String, String>();
m.put("phoneName", phonesLG[i]);
m.put("colorName", colors[i]);
m.put("price", prices[i]);
childDataItem.add(m);
}
childData.add(childDataItem);
// список аттрибутов элементов для чтения
String childFrom[] = new String[] {"phoneName", "colorName", "price"};
// список ID view-элементов, в которые будет помещены аттрибуты элементов
int childTo[] = new int[] {R.id.tv1, R.id.tv2, R.id.tv3};
SimpleExpandableListAdapter adapter = new SimpleExpandableListAdapter(
this,
groupData,
android.R.layout.simple_expandable_list_item_1,
groupFrom,
groupTo,
childData,
R.layout.smartphone_field,
childFrom,
childTo);
elvMain.setAdapter(adapter);
}
}
Код: Выделить всё
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/tv1"
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/tv2"
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/tv3"
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
Re: Урок 45. Список-дерево ExpandableListView
stas, Neustart, Arch1eА вообще вы можете создать для элементов свой layout, например, с тремя TextView. И к каждому элементу списка (Map) добавить еще по два атрибута: цена и цвет. Далее указываете ваш layout в конструкторе, формируете соответственно массивы childFrom и childTo чтобы сопоставить атрибуты и TextView, и получится, что каждый элемент группы содержит более подробную информацию о смартфоне.
Моя реализация, может кому поможет:
MainActivity:
Код: Выделить всё
public class MainActivity extends Activity {
String[] groups = new String[] {"HTC", "Samsung", "LG"};
String[] phonesHTC = new String[] {"Sensation", "Desire", "Wildfire", "Hero"};
String[] phonesSams = new String[] {"Galaxy S II", "Galaxy Nexus", "Wave", "Absolute"};
String[] phonesLG = new String[] {"Optimus", "Optimus Link", "Optimus Black", "Optimus One"};
String[] colors = new String[] {"Black", "Blue", "White", "Pink"};
String[] prices = new String[] {"400$", "350$", "500$", "200$"};
ArrayList<Map<String, String>> groupData;
ArrayList<Map<String, String>> childDataItem;
ArrayList<ArrayList<Map<String, String>>> childData;
// childData = ArrayList<childDataItem>
// список аттрибутов группы или элемента
Map<String, String> m;
ExpandableListView elvMain;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
elvMain = (ExpandableListView)findViewById(R.id.elvMain);
groupData = new ArrayList<Map<String, String>>();
for (String group : groups) {
m = new HashMap<String, String>();
m.put("groupName", group);
groupData.add(m);
}
String groupFrom[] = new String[]{"groupName"};
int groupTo[] = new int[] {android.R.id.text1};
childData = new ArrayList<ArrayList<Map<String, String>>>();
childDataItem = new ArrayList<Map<String, String>>();
// заполняем список аттрибутов для каждого элемента
for (int i = 0; i < phonesHTC.length; i++) {
m = new HashMap<String, String>();
m.put("phoneName", phonesHTC[i]);
m.put("colorName", colors[i]);
m.put("price", prices[i]);
childDataItem.add(m);
}
// добавляем в коллекцию коллекций
childData.add(childDataItem);
// создаем коллекцию элементов для второй группы
childDataItem = new ArrayList<Map<String, String>>();
for (int i = 0; i < phonesSams.length; i++) {
m = new HashMap<String, String>();
m.put("phoneName", phonesSams[i]);
m.put("colorName", colors[i]);
m.put("price", prices[i]);
childDataItem.add(m);
}
childData.add(childDataItem);
// создаем коллекцию элементов для третьей группы
childDataItem = new ArrayList<Map<String, String>>();
for (int i = 0; i < phonesLG.length; i++) {
m = new HashMap<String, String>();
m.put("phoneName", phonesLG[i]);
m.put("colorName", colors[i]);
m.put("price", prices[i]);
childDataItem.add(m);
}
childData.add(childDataItem);
// список аттрибутов элементов для чтения
String childFrom[] = new String[] {"phoneName", "colorName", "price"};
// список ID view-элементов, в которые будет помещены аттрибуты элементов
int childTo[] = new int[] {R.id.tv1, R.id.tv2, R.id.tv3};
SimpleExpandableListAdapter adapter = new SimpleExpandableListAdapter(
this,
groupData,
android.R.layout.simple_expandable_list_item_1,
groupFrom,
groupTo,
childData,
R.layout.smartphone_field,
childFrom,
childTo);
elvMain.setAdapter(adapter);
}
}
Код: Выделить всё
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/tv1"
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/tv2"
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/tv3"
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
Re: Урок 45. Список-дерево ExpandableListView
Добрый день, подскажите, как удалить группу в ExpandableListView.
Re: Урок 45. Список-дерево ExpandableListView
как вариантenergo5 писал(а):Добрый день, подскажите, как удалить группу в ExpandableListView.
Код: Выделить всё
groupData.remove(0);
childData.remove(0);
adapter = new SimpleExpandableListAdapter(this,
groupData, android.R.layout.simple_expandable_list_item_2,
groupFrom,
groupTo,
childData,
android.R.layout.simple_expandable_list_item_2,
childFrom,
childTo);
elvMain.setAdapter(adapter);
Re: Урок 45. Список-дерево ExpandableListView
Если вдруг кто не понимает для чего нужны Map<String, String> как основной элемент списка (я пол часа сидел, думал, не мог понять), то при изменении кода на такой:
получится вот такой список
Код: Выделить всё
for (String group : groups) {
m = new HashMap<String, String>();
m.put("groupName", group);
m.put("groupName1", "hahaha");
groupData.add(m);
}
String[] groupFrom = new String[] {"groupName", "groupName1"};
int[] groupTo = new int[] {android.R.id.text1, android.R.id.text2};
Код: Выделить всё
childDataItem = new ArrayList<>();
for (String phone : phonesLG) {
m = new HashMap<>();
m.put("phoneName", phone);
m.put("phoneName1", "lalala");
childDataItem.add(m);
}
childData.add(childDataItem);
String[] childFrom = new String[] {"phoneName1", "phoneName"};
int[] childTo = new int[] {android.R.id.text1, android.R.id.text2};
Код: Выделить всё
SimpleExpandableListAdapter adapter = new SimpleExpandableListAdapter(this,
groupData, android.R.layout.simple_expandable_list_item_2,
groupFrom,
groupTo,
childData,
android.R.layout.simple_expandable_list_item_2,
childFrom,
childTo);
- Вложения
-
- Безымянный.png (33.96 КБ) 15441 просмотр
Re: Урок 45. Список-дерево ExpandableListView
Сразу скажу, что код не из этого урока...
Как переделать адаптер, чтобы в ExpandableListView в child элементах находились определённые картинки?
В идеале конечно ловить название пункта и выводить соответствующую ему картинку...
Код основной активности: (Тут ловим выбранный пункт по слову и запускаем нужную активность...)
Далее класс для отображения заголовков:
Класс для названий в child:
Ну и собственно сам класс адаптера:
Как переделать адаптер, чтобы в ExpandableListView в child элементах находились определённые картинки?
В идеале конечно ловить название пункта и выводить соответствующую ему картинку...
Код основной активности: (Тут ловим выбранный пункт по слову и запускаем нужную активность...)
Код: Выделить всё
public class Name extends Activity implements
SearchView.OnQueryTextListener, SearchView.OnCloseListener {
private SearchView mSearchView;
private FishNameExpandableListAdapter mAdapter;
private ExpandableListView mExpandableListView;
private ArrayList continentList = new ArrayList<FishNameContinent>();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.name);
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
mSearchView = (SearchView) findViewById(R.id.searchViewFishName);
mSearchView.setVisibility(View.GONE);
mSearchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
final FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
displayList();
expandAll();
collapseAll();
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Animation openSearch = AnimationUtils.loadAnimation(FishName.this, android.R.anim.slide_in_left);
mSearchView.startAnimation(openSearch);
mSearchView.setVisibility(View.VISIBLE);
Animation hideFab = AnimationUtils.loadAnimation(FishName.this, android.R.anim.slide_out_right);
fab.startAnimation(hideFab);
fab.setVisibility(View.GONE);
// открываем клавиатуру и активируем searchView
mSearchView.requestFocus();
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
mSearchView.setIconifiedByDefault(false);
mSearchView.setOnQueryTextListener(FishName.this);
mSearchView.setOnCloseListener(FishName.this);
}
});
// нажатие на элемент
mExpandableListView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
public boolean onChildClick(ExpandableListView parent, View convertView,
int groupPosition, int childPosition, long id) {
RelativeLayout relativeLayout = (RelativeLayout )convertView;
TextView textView = (TextView) relativeLayout.findViewById(R.id.namerow);
String childText = textView.getText().toString(); // получаем текст нажатого элемента
//названия:
if (childText == "Анабас") {Intent i = new Intent(FishName.this, Anabas.class);startActivity(i);};
if (childText == "Ктенопома") {Intent i = new Intent(FishName.this, Ktenopoma.class);startActivity(i);};
}
});
}
//метод закрытия групп
private void collapseAll() {
int count = mAdapter.getGroupCount();
for (int i = 0; i < count; i++){
mExpandableListView.collapseGroup(i);
}
}
//метод открытия групп
private void expandAll() {
int count = mAdapter.getGroupCount();
for (int i = 0; i < count; i++) {
mExpandableListView.expandGroup(i);
}
}
private void displayList() {
loadSomeData();
mExpandableListView = (ExpandableListView) findViewById(R.id.expandableListViewFishName);
mAdapter = new FishNameExpandableListAdapter(FishName.this, continentList);
mExpandableListView.setAdapter(mAdapter);
}
private void loadSomeData() {
ArrayList countryList = new ArrayList<FishNamePopulation>();
FishNamePopulation worldPopulation = new FishNamePopulation("Анабас");
countryList.add(worldPopulation);
worldPopulation = new FishNamePopulation("Ктенопома");
countryList.add(worldPopulation);
FishNameContinent continent = new FishNameContinent("Анабасовые", countryList);
continentList.add(continent);
}
@Override
public boolean onClose() {
mAdapter.filterData("");
expandAll();
return false;
}
@Override
public boolean onQueryTextSubmit(String query) {
mAdapter.filterData(query);
expandAll();
return false;
}
@Override
public boolean onQueryTextChange(String query) {
mAdapter.filterData(query);
expandAll();
return false;
}
}
Код: Выделить всё
public class FishNameContinent {
private String mName;
private List<FishNamePopulation> mCountryList = new ArrayList<FishNamePopulation>();
public FishNameContinent(String name, ArrayList<FishNamePopulation> countryList) {
this.mName = name;
this.mCountryList = countryList;
}
public String getName() {
return mName;
}
public void setName(String name) {
this.mName = name;
}
public ArrayList<FishNamePopulation> getCountryList() {
return (ArrayList<FishNamePopulation>) mCountryList;
}
public void setCountryList(ArrayList<FishNamePopulation> countryList) {
this.mCountryList = countryList;
};
}
Код: Выделить всё
public class FishNamePopulation {
private String mCountry;
public FishNamePopulation(String country) {
this.mCountry = country;
}
public String getCountry() {
return this.mCountry;
}
public void setCountry(String country) {
this.mCountry = country;
}
}
Код: Выделить всё
public class FishNameExpandableListAdapter extends BaseExpandableListAdapter {
private Context mContext;
private ArrayList<FishNameContinent> mContinentList;
private ArrayList<FishNameContinent> mOriginalList;
private LayoutInflater mInflater;
private List<FishNamePopulation> mWorldpopulationlist = null;
private ArrayList<FishNamePopulation> mArraylist;
public FishNameExpandableListAdapter(Context context,
ArrayList<FishNameContinent> continentList) {
this.mContext = context;
this.mContinentList = new ArrayList<>();
this.mContinentList.addAll(continentList);
this.mOriginalList = new ArrayList<>();
this.mOriginalList.addAll(continentList);
}
public class ViewHolder {
TextView country;
TextView population;
ImageView flag; // добавлено
}
@Override
public int getGroupCount() {
return mContinentList.size();
}
@Override
public int getChildrenCount(int groupPosition) {
ArrayList<FishNamePopulation> countryList = mContinentList.get(
groupPosition).getCountryList();
return countryList.size();
}
@Override
public Object getGroup(int groupPosition) {
return mContinentList.get(groupPosition);
}
@Override
public Object getChild(int groupPosition, int childPosition) {
ArrayList<FishNamePopulation> countryList = mContinentList.get(
groupPosition).getCountryList();
return countryList.get(childPosition);
}
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
@Override
public boolean hasStableIds() {
return true;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
FishNameContinent continent = (FishNameContinent) getGroup(groupPosition);
if (convertView == null) {
LayoutInflater layoutInflater = (LayoutInflater) mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = layoutInflater.inflate(R.layout.group_row, null);
}
TextView tvHeading = (TextView) convertView.findViewById(R.id.heading);
tvHeading.setText(continent.getName().trim());
return convertView;
}
@Override
public View getChildView(int groupPosition, int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
FishNamePopulation worldpopulation = (FishNamePopulation) getChild(
groupPosition, childPosition);
if (convertView == null) {
LayoutInflater layoutInflater = (LayoutInflater) mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = layoutInflater.inflate(R.layout.child_row, null);
}
TextView tvName = (TextView) convertView.findViewById(R.id.namerow);
tvName.setText(worldpopulation.getCountry().trim());
return convertView;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
public void filterData(String query) {
query = query.toLowerCase();
Log.v("MyAdapter", String.valueOf(mContinentList.size()));
mContinentList.clear();
if (query.isEmpty()) {
mContinentList.addAll(mOriginalList);
} else {
for (FishNameContinent continent : mOriginalList) {
ArrayList<FishNamePopulation> countryList = continent
.getCountryList();
ArrayList<FishNamePopulation> newList = new ArrayList<FishNamePopulation>();
for (FishNamePopulation country : countryList) {
if (country.getCountry().toLowerCase()
.contains(query)) {
newList.add(country);
}
}
if (newList.size() > 0) {
FishNameContinent nContinent = new FishNameContinent(continent.getName(),
newList);
mContinentList.add(nContinent);
}
}
}
Log.v("MyAdapter", String.valueOf(mContinentList.size()));
notifyDataSetChanged();
}
-
- Сообщения: 2
- Зарегистрирован: 01 июн 2016, 12:23
Re: Урок 45. Список-дерево ExpandableListView
Добрый день, подскажите пожалуйста. У меня возникла такая ситуация:
я динамически заполняю список т.е. я беру все данные внутри составного обьекта, формирую список групп, далее добавляю их в android.R.id.text1 и начинаю заполнять "детей" и проделываю теже действия.
В результате у меня в первой (из N) группе содержатся ВСЕ "дети" от всех групп, а при попытке открыть другие группы - вылет. Переписывал многое количество раз, но никак не пойму почему не происходит соответствие Группа - Дети
я динамически заполняю список т.е. я беру все данные внутри составного обьекта, формирую список групп, далее добавляю их в android.R.id.text1 и начинаю заполнять "детей" и проделываю теже действия.
В результате у меня в первой (из N) группе содержатся ВСЕ "дети" от всех групп, а при попытке открыть другие группы - вылет. Переписывал многое количество раз, но никак не пойму почему не происходит соответствие Группа - Дети
Код: Выделить всё
void showContextDefenitionList(ContextDefinitionList cDefinitionList) {
Map<String, String> map;
// коллекция для групп
ArrayList<Map<String, String>> groupDataList = new ArrayList<Map<String, String>>();
// заполняем коллекцию групп из массива с названиями групп
for (int i =0; i< cDefinitionList.getContextList().size(); i++) {
// заполняем список атрибутов для каждой группы
map = new HashMap();
map.put("groupName", cDefinitionList.getContextList().get(i).getName()); // имя контекста
groupDataList.add(map);
}
// список атрибутов групп для чтения
String groupFrom[] = new String[] { "groupName" };
// список ID view-элементов, в которые будет помещены атрибуты групп
int groupTo[] = new int[] { android.R.id.text1 };
// создаем общую коллекцию для коллекций элементов
ArrayList<ArrayList<Map<String, String>>> сhildDataList = new ArrayList<ArrayList<Map<String, String>>>();
// в итоге получится сhildDataList = ArrayList<сhildDataItemList>
// создаем коллекцию элементов для первой группы
ArrayList<Map<String, String>> сhildDataItemList = new ArrayList<Map<String, String>>();
// заполняем список атрибутов для каждого элемента
for (int i =0; i< cDefinitionList.getContextList().size(); i++) {
//int i = 1;
for (int j = 0; j < cDefinitionList.getContextList().get(i).getList().size(); j++) {
map = new HashMap();
map.put("sensorName", cDefinitionList.getContextList().get(i).getList().get(j).getSensorName() + ": " + cDefinitionList.getContextList().get(i).getList().get(j).getSensorData()); // имя и данные с сенсора
сhildDataItemList.add(map);
}
// добавляем в коллекцию коллекций
сhildDataList.add(сhildDataItemList);
}
// список атрибутов элементов для чтения
String childFrom[] = new String[] { "sensorName" };
// список ID view-элементов, в которые будет помещены атрибуты
// элементов
int childTo[] = new int[] { android.R.id.text1 };
SimpleExpandableListAdapter adapter = new SimpleExpandableListAdapter(
this, groupDataList,
android.R.layout.simple_expandable_list_item_1, groupFrom,
groupTo, сhildDataList, android.R.layout.simple_list_item_1,
childFrom, childTo);
ExpandableListView expandableListView = (ExpandableListView) findViewById(R.id.expandableListView);
expandableListView.setAdapter(adapter);
}
-
- Сообщения: 2
- Зарегистрирован: 01 июн 2016, 12:23
Re: Урок 45. Список-дерево ExpandableListView
Кажется нашел ответ ... я не обнулял коллекцию детей...
Код: Выделить всё
[color=#FF0000]...[/color]
for (int i =0; i< cDefinitionList.getContextList().size(); i++) {
//int i = 1;
// создаем коллекцию элементов для каждой группы
ArrayList<Map<String, String>> сhildDataItemList = new ArrayList<Map<String, String>>();
for (int j = 0; j < cDefinitionList.getContextList().get(i).getList().size(); j++) {
map = new HashMap();
map.put("sensorName", cDefinitionList.getContextList().get(i).getList().get(j).getSensorName() + ": " + cDefinitionList.getContextList().get(i).getList().get(j).getSensorData()); // название месяца
сhildDataItemList.add(map);
}
// добавляем в коллекцию коллекций
сhildDataList.add(сhildDataItemList);
}
[color=#FF0000]...[/color]
Re: Урок 45. Список-дерево ExpandableListView
Можно картинку как это выглядит на экране?
Не могу понять это то что мне нужно или нет?
У меня есть две таблички в SQLite, связанные отношением один-ко-многим. Хочу сделать выбор "Родительский элемент" -> выпадающий список элементов группы. + Множественный выбор с чекбоксами у каждого элемента, но это уже прикручу как сделано в уроке 54.
Какой адаптер вообще выбрать в таком случае? ExpandableListView или SimpleCursorTreeAdapter?
Не могу понять это то что мне нужно или нет?
У меня есть две таблички в SQLite, связанные отношением один-ко-многим. Хочу сделать выбор "Родительский элемент" -> выпадающий список элементов группы. + Множественный выбор с чекбоксами у каждого элемента, но это уже прикручу как сделано в уроке 54.
Какой адаптер вообще выбрать в таком случае? ExpandableListView или SimpleCursorTreeAdapter?
Re: Урок 45. Список-дерево ExpandableListView
ExpandableListView это не адаптер. Это вью для показа дерева.
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
-
- Сообщения: 1
- Зарегистрирован: 07 июн 2018, 16:09
Re: Урок 45. Список-дерево ExpandableListView
You can refer below resource with good examples on sorting,
https://www.flowerbrackets.com/sort-string-array-java/
https://www.flowerbrackets.com/sort-string-array-java/
Последний раз редактировалось WilsonSmith 02 ноя 2018, 16:29, всего редактировалось 1 раз.
-
- Сообщения: 1
- Зарегистрирован: 18 июл 2018, 13:43
Re: Урок 45. Список-дерево ExpandableListView
Есть ли такой же список, но без разворотов/свертываний групп? Если нет, то можно ли убрать стрелку слева?
Re: Урок 45. Список-дерево ExpandableListView
Чтобы вот так вышло:
Код:
Код:
Код: Выделить всё
String[] countryPhone = new String[]{"Тайвань", "Корея Samsung", "Корея LG"};
Код: Выделить всё
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// заполняем коллекцию групп из массива с названиями групп
groupData = new ArrayList<Map<String, String>>();
for (String group : groups) {
m = new HashMap<String, String>();
m.put("groupName", group);
for (String countryPh : countryPhone)
{
if (group.equals("HTC") && countryPh.equals("Тайвань"))
{
m.put("groupName1", countryPh);
break;
}
if (group.equals("Samsung") && countryPh.equals("Корея Samsung"))
{
m.put("groupName1", countryPh);
break;
}
if (group.equals("LG") && countryPh.equals("Корея LG"))
{
m.put("groupName1", countryPh);
break;
}
else m.put("groupName1", "NOT");
}
groupData.add(m);
}
// список атрибутов групп для чтения
String groupFrom[] = new String[]{"groupName", "groupName1"};
// список ID view-элементов, в который будет помещен атрибуты групп
int groupTo[] = new int[]{android.R.id.text1, android.R.id.text2};
Код: Выделить всё
SimpleExpandableListAdapter adapter = new SimpleExpandableListAdapter(
this,
groupData,
android.R.layout.simple_expandable_list_item_2,
groupFrom,
groupTo,
childData,
android.R.layout.simple_expandable_list_item_2,
childFrom,
childTo);