Как сделать ExpandableList внутри child ExpandableList?

Необходимо создать дерево файлов на андройде. Поправьте, если иду не тем путём.
Для этого я использую ExpandableList и его адаптер.

Код стандартный:
Данные отправляю в адаптер и адаптер назначаю элементу ExpandableList.
group.add(new Dirr (0, co2, path2, name2, typ2, chi2)); 
	        ExpListAdapter adapter = new ExpListAdapter(0, getActivity().getApplicationContext(), group, true, 0);
	        listView.setAdapter(adapter);

Код адаптера:
public class ExpListAdapter extends BaseExpandableListAdapter {
private int mi;
private ArrayList<Dirr> mGroups;
private Context mContext;
private int yt=0;
public ExpListAdapter (int idd, Context context, ArrayList<Dirr> group, boolean all, int childid){
mi=idd;
mContext = context;
mGroups = group;
yt=1;
}

@Override
public int getGroupCount() {
return mGroups.get(mi).size();
}

@Override
public int getChildrenCount(int groupPosition) {
return yt;
}

@Override
public Object getGroup(int groupPosition) {
return mGroups.get(mi).getname(groupPosition);
}

@Override
public Object getChild(int groupPosition, int childPosition) {
return null;
}

@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) {

if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.group_view, null);
}
TextView textGroup = (TextView) convertView.findViewById(R.id.textGroup);
textGroup.setText(mGroups.get(mi).getname(groupPosition));

return convertView;

}

@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild,
             View convertView, ViewGroup parent) {
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.child_view, null);
}

ExpandableListView listView = (ExpandableListView) convertView.findViewById(R.id.expandableListView2);

ExpListAdapter adapter = new ExpListAdapter(mi, getActivity().getApplicationContext(), mGroups, false, childPosition);
listView.setAdapter(adapter);
return convertView;
}

@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
}

Код group_view и child_view соответственно:
<?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">
    <TextView
            android:id="@+id/textGroup"
            android:layout_width="wrap_content"
            android:layout_height="50dp"
            android:layout_marginLeft="5dp"
            android:layout_marginTop="20dp"
            android:textColor="@android:color/white"
            android:textStyle="bold"
            />
</LinearLayout>

<?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">
 			<ExpandableListView
                android:id="@+id/expandableListView2"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:indicatorLeft="250dp"
                android:indicatorRight="300dp" >
            </ExpandableListView>
</LinearLayout>


Так вот проблема одна - когда разворачивается ExpandableList, то отображается только 1 строка дочернего ExpandableList. Как сделать, чтобы отображался весь?

Либо как сделать дерево файлов с помощью ExpandableList? Какими путями?
  • Вопрос задан
  • 2705 просмотров
Решения вопроса 1
Master255
@Master255 Автор вопроса
нет. Это слишком легко и не правильно. Я знаю о этом способе. Спасибо.
Я думаю, если у меня получится это решить, то это потянет на целую статью на хабре)). Так как тема деревьев на андройде слабо освещённая и проработанная. И не факт что кто-то вообще это делал через ExpandableList.

UPD: Решил вопрос. Всё таки использовал https://github.com/Polidea/tree-view-list-android
Интерфейсная составляющая никак не влияет на массивы данных, которые будет отображать. Исходя из этого в общем-то можно использовать любой интерфейс - хоть textview. Конечно не просто написать дерево на яве с любым интерфейсом. expandeblelist наоборот усложняет задачу своими дополнительными вызовами при раскрытии и сворачивании. В общем - это тот интерфейс, который наименее подходит для построения деревьев! tree-view-list-android - проработан достаточно хорошо, что бы сделать на нём всё что угодно.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@dr_yand
Я использовал для отображения древовидной структуры code.google.com/p/tree-view-list-android
Там есть и пример, можно разобраться как работает
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы