Ich habe viel gearbeitet, um ** N-Level-ExpandableListView zu erstellen. Ich bin in der Lage, es zu jedem Niveau zu machen, aber meine Anforderung besteht darin, den Zustand der geöffneten Gruppen auch nach dem Scrollen beizubehalten. Ich habe es mit mehreren Möglichkeiten versucht, aber immer noch nicht erfolgreich.Nach dem Aufrechterhalten der Kollaps/Expansion-Status für N-Ebene oder Multilevel erweiterbar Listview einige Untergruppen werden nicht angezeigt
Diese erweiterbare Listenansicht erfüllt alle anderen Unternehmensanforderungen als dieses Problem.
* Dies ist eine Möglichkeit, die ich ausprobiert habe. Ich kann die Zustände in Objekten speichern, aber nur wenige Untergruppen werden angezeigt. *
Ich versuchte mit OnMeasure (Breite, Höhe) -Methode, um die Höhe zu erhalten, wenn dynamisch erzeugte Liste aber immer noch nicht perfekt zu bekommen.
Auch ich ging durch eine Reihe von Artikeln für die gleiche.
Befestigt Screenshot meiner Arbeits Anwendung ..
Hier ist mein Code.
public class ParentLevelAdapter extends BaseExpandableListAdapter {
private Context context;
private View convertView;
Account account;
private ArrayList<Model_Departments> list_departments;
public ParentLevelAdapter (Context context,
ArrayList<Model_Departments> list_departments, Account account) {
this.context = context;
this.list_departments = list_departments;
this.account = account;
}
public void updateList(Context context,
ArrayList<Model_Departments> list_departments, Account account) {
notifyDataSetChanged();
}
@Override
public Object getChild(int arg0, int arg1) {
return this.getChild(arg0, arg1);
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
@Override
public View getChildView(int groupPosition, int childPosition,
boolean isLastChild, View convertView, ViewGroup parent)
{
final SecondLevelExpandableListView subGroupListView;
SecondListView employeeLisView = null;
if (convertView == null) {
if (list_departments.get(groupPosition).hasSubGroups()) {
subGroupListView = new SecondLevelExpandableListView(
context);
subGroupListView.setGroupIndicator(null);
adap = new ParentLevelAdapter (context,
list_departments.get(groupPosition).subgroups,
account);
subGroupListView.setAdapter(adap);
return subGroupListView;
} else {
employeeLisView = new SecondListView(context);
employeeLisView.setAdapter(new EmployeeAdapter(context,
list_departments.get
(groupPosition).employee, account));
return employeeLisView;
}
} else {
if (list_departments.get(groupPosition).hasSubGroups()) {
if (convertView instanceof SecondLevelExpandableListView) {
subGroupListView = (SecondLevelExpandableListView) convertView;
subGroupListView.onMeasure(10000, 999999);
subGroupListView.setGroupIndicator(null);
adap = new ParentLevelAdapter (context,
list_departments.get(groupPosition).subgroups,
account);
subGroupListView.setAdapter(adap);
return subGroupListView;
} else {
subGroupListView = new SecondLevelExpandableListView(
context);
subGroupListView.setGroupIndicator(null);
adap = new ParentLevelAdapter (context,
list_departments.get(groupPosition).subgroups,
account);
subGroupListView.setAdapter(adap);
return subGroupListView;
}
} else {
if (convertView instanceof SecondListView) {
employeeLisView = (SecondListView) convertView;
employeeLisView.setAdapter(new EmployeeAdapter(context,
list_departments.get(groupPosition).employee,
account));
return employeeLisView;
} else {
employeeLisView = new SecondListView(context);
employeeLisView.setAdapter(new EmployeeAdapter(context,
list_departments.get(groupPosition).employee,
account));
return employeeLisView;
}
}
}
}
@Override
public int getChildrenCount(int groupPosition) {
// return list_departments.get(groupPosition).subgroups.size();
return 1;
}
@Override
public Object getGroup(int groupPosition) {
return list_departments.get(groupPosition);
}
@Override
public int getGroupCount() {
return list_departments.size();
}
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded,
View convertV, ViewGroup parent) {
convertView = convertV;
// Log.v("ParentAdapter GroupView ",list_departments.get(groupPosition).name);
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.layout_icon_node, null);
TextView text = (TextView) convertView
.findViewById(R.id.node_value);
// text.setText("SECOND LEVEL");
text.setText(list_departments.get(groupPosition).name);
} else {
TextView text = (TextView) convertView
.findViewById(R.id.node_value);
text.setText(list_departments.get(groupPosition).name);
}
if (list_departments.get(groupPosition).isExpanded()) {
Log.i("Group Position=", groupPosition + " NAme="
+ list_departments.get(groupPosition).name);
((SecondLevelExpandableListView) parent)
.expandGroup(groupPosition);
}
/* code to save state for Group expand and collapse for individual objects*/
((SecondLevelExpandableListView) parent)
.setOnGroupExpandListener(new OnGroupExpandListener() {
@Override
public void onGroupExpand(int groupPosition) {
// TODO Auto-generated method stub
list_departments.get(groupPosition).setExpanded(
true);
Log.i("Group", "Expand groupposition="
+ groupPosition);
Log.i("Group",
"Expand"
+ list_departments
.get(groupPosition).name);
}
});
((SecondLevelExpandableListView) parent)
.setOnGroupCollapseListener(new OnGroupCollapseListener() {
@Override
public void onGroupCollapse(int groupPosition) {
// TODO Auto-generated method stub
list_departments.get(groupPosition).setExpanded(
false);
Log.i("Group", "Collapse groupposition="
+ groupPosition);
Log.i("Group",
"Collapse"
+ list_departments
.get(groupPosition).name);
}
});
return convertView;
}
@Override
public boolean hasStableIds() {
return true;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
}
Mein Pojo_Object:
public class Model_Departments implements Comparable<Model_Departments>{
public String name;
protected long parent_id;
private boolean isexpanded;
public boolean isExpanded() {
return isexpanded;
}
public void setExpanded(boolean isexpanded) {
this.isexpanded = isexpanded;
}
public ArrayList<Model_Departments> subgroups = new ArrayList<>();
public ArrayList<Model_Employees> employee = new ArrayList<>();
public Model_Departments(String department_name, long parent_id) {
this.name = department_name;
this.parent_id = parent_id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public long getParent_id() {
return parent_id;
}
public void setParent_id(long parent_id) {
this.parent_id = parent_id;
}
public ArrayList<Model_Departments> getSubgroups() {
return subgroups;
}
public void setSubgroups(ArrayList<Model_Departments> subgroups) {
this.subgroups = subgroups;
}
public ArrayList<Model_Employees> getEmployee() {
return employee;
}
public void setEmployee(ArrayList<Model_Employees> employee) {
this.employee = employee;
}
public boolean hasEmployees() {
if (employee != null && employee.size() > 0)
return true;
else
return false;
}
public boolean hasSubGroups() {
if (subgroups != null && subgroups.size() > 0)
return true;
else
return false;
}
@Override
public int compareTo(Model_Departments another) {
if(this.hasSubGroups())
{
Collections.sort(this.subgroups);
}
return this.getName().compareTo(another.getName());
}
}
Model_Employee.java
public class Model_Employees implements Comparable<Model_Employees>{
public String name;
public Model_Employees(String name, String location) {
super();
this.name = name;
}
public Model_Employees() {
// TODO Auto-generated constructor stub
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public int compareTo(Model_Employees another) {
return this.getName().compareTo(another.getName());
}
}
Vielen Dank im Voraus.
Jungs plz help gebucht haben wir strug gleitend mit diesem Problem von sehr lange – Pratswinz
Ich habe verwendet, expanded-Variable, um den Zustand mit jeder Gruppe auf jeder Ebene zu speichern. am Anfang ist es falsch und ongroupepert und Zuhörer ich mache es wahr und oncollapselistener ich mache es falsch. Es funktioniert, aber beim Laden während Scrool versteckt es einige Gruppen. Nach dem Klicken auf eine andere Untergruppe wurde es angezeigt. –
Vielleicht wäre es besser, TreeView-Bibliothek zu verwenden - https://github.com/bmelnychuk/AndroidTreeView – Oleksandr