0

私は同じことについてSOに関するいくつかの質問に出くわし、それらを試しました。3レベルExpandableListView Android

2つのレベルを展開可能なリストに表示できますが、2番目のレベルをクリックすると3番目のレベルを表示できません。

私はそうのようなものを試してみました: -

ParentView(ファーストレベル)

public class ParentView : BaseExpandableListAdapter 
    { 
     public static int FIRST_LEVEL_COUNT = 6; 
     public static int SECOND_LEVEL_COUNT = 4; 
     public static int THIRD_LEVEL_COUNT = 10; 
     private Context context; 



     public ParentView(Context context) 
     { 
      this.context = context; 
     } 

     public ParentView() 
     { 
     } 

     public override Java.Lang.Object GetChild(int groupPosition, int childPosition) 
     { 
      return childPosition; 
     } 


     public override long GetChildId(int groupPosition, int childPosition) 
     { 
      return childPosition; 
     } 



     public override View GetChildView(int groupPosition, int childPosition, bool isLastChild, View convertView, ViewGroup parent) 
     { 
      var SecondLevelexplv = new CustExpListview(Application.Context); 
      SecondLevelexplv.SetAdapter(new SecondLevelAdapter(context)); 
      SecondLevelexplv.SetGroupIndicator(null); 
      return SecondLevelexplv; 
     } 

     public override int GetChildrenCount(int groupPosition) 
     { 
      return 3; 
     } 

     public override Java.Lang.Object GetGroup(int groupPosition) 
     { 
      return groupPosition; 
     } 
     public override int GroupCount 
     { 
      get 
      { 
       return 5; 
      } 
     } 

     public override long GetGroupId(int groupPosition) 
     { 
      return groupPosition; 
     } 

     public override View GetGroupView(int groupPosition, bool isExpanded, View convertView, ViewGroup parent) 
     { 
      var tv = new TextView(Application.Context) 
      { 
       Text = "->FirstLevel", 
      }; 
      tv.SetBackgroundColor(Color.Blue); 
      tv.SetPadding(10, 7, 7, 7); 

      return tv; 
     } 

     public override bool IsChildSelectable(int groupPosition, int childPosition) 
     { 
      return true; 
     } 

     public override bool HasStableIds 
     { 
      get 
      { 
       return true; 
      } 
     } 

    } 

CustExpListView

public class CustExpListview : ExpandableListView 
{ 

public CustExpListview(Context context) : base(context) 
{ 
} 

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) 
{ 
    widthMeasureSpec = MeasureSpec.MakeMeasureSpec(999999, MeasureSpecMode.AtMost); 
    heightMeasureSpec = MeasureSpec.MakeMeasureSpec(999999, MeasureSpecMode.AtMost); 
    OnMeasure(widthMeasureSpec, heightMeasureSpec); 
} 
} 

SecondLevelAdapter

public class SecondLevelAdapter : BaseExpandableListAdapter 
{ 
public static int THIRD_LEVEL_COUNT = 10; 
private Context context; 
private readonly ParentView parentView; 

public SecondLevelAdapter(Context context) 
{ 
    this.context = context; 
} 

public SecondLevelAdapter(ParentView parentView) 
{ 
this.parentView = parentView; 
} 

public override Java.Lang.Object GetGroup(int groupPosition) 
{ 
    return groupPosition; 
} 

public override int GroupCount 
{ 
    get 
    { 
     return 5; 
    } 
} 



public override long GetGroupId(int groupPosition) 
{ 
    return groupPosition; 
} 


public override View GetGroupView(int groupPosition, bool isExpanded, View convertView, ViewGroup parent) 
{ 
    var tv = new TextView(Application.Context) 
    { 
     Text = "-->Second" 
    }; 
    tv.SetPadding(12, 7, 7, 7); 
    tv.SetBackgroundColor(Color.GreenYellow); 

    return tv; 
} 



public override Java.Lang.Object GetChild(int groupPosition, int childPosition) 
{ 
    return childPosition; 
} 

public override long GetChildId(int groupPosition, int childPosition) 
{ 
    return childPosition; 
} 



public override View GetChildView(int groupPosition, int childPosition, bool isLastChild, View convertView, ViewGroup parent) 
{ 
    var tv = new TextView(Application.Context) 
    { 
     Text = "third" 
    }; 
    tv.SetPadding(18, 5, 5, 5); 
    tv.SetBackgroundColor(Color.Green); 

    return tv; 
} 


public override int GetChildrenCount(int ChildPosition) 
{ 
    return 4; 
} 


public override bool IsChildSelectable(int groupPosition, int childPosition) 
{ 
    return true; 
} 

public override bool HasStableIds 
{ 
    get 
    { 
     return true; 
    } 
} 

}

私が気づいたのはGetGroup()が呼び出されてもSecondLevelAdapterGetChildView()が呼び出されないことです。私は実際にリストを4レベルまで拡大したいと思っていますが、私は第3レベルそのものに固執しています。

何か助けていただければ幸いです。

+2

4レベルの拡張リストをモバイル?私は、[this]のようにモバイルフレンドリーに見えるようにデザインを再考するかもしれないと思う(https://docs.microsoft.com/en-us/windows/uwp/controls-and-patterns/images/patterns-md-stacked.png)。 )。 –

+0

@R.Zagórskiうまくいけば、顧客はその妥協の余地のない種類の要求を持っています:) – user3034944

答えて

0

問題は、-->Secondのすべての行に対して、全体でExpandableListViewであり、5つのグループが含まれています。そして、現在の親グループの高さは子供のために自動的に展開されませんExpandableListView。開いた子リスト:thirdは表示されません。

  1. 変更1から5からSecondLevelAdapterGroupCount

    public override int GroupCount 
    { 
        get 
        { 
         //return 5; 
         return 1;//Change GroupCount to 1 
        } 
    } 
    
  2. あなたはの高さを変更する必要がある問題を修正するために

    、作られているいくつかの変更がありますすべての第2レベルのExpandableListViewを手動で実行します。これはGroupExpandGroupCollapseイベントを実装することによって行うことができます。

    ParentView.cs:

    public override View GetChildView(int groupPosition, int childPosition, bool isLastChild, View convertView, ViewGroup parent) 
    { 
        var SecondLevelexplv = new CustExpListview(Application.Context); 
        SecondLevelexplv.SetAdapter(new SecondLevelAdapter(context)); 
        SecondLevelexplv.SetGroupIndicator(null); 
        SecondLevelexplv.GroupExpand += SecondLevelexplv_GroupExpand; 
        SecondLevelexplv.GroupCollapse += SecondLevelexplv_GroupCollapse; 
        return SecondLevelexplv; 
    } 
    
    private void SecondLevelexplv_GroupCollapse(object sender, ExpandableListView.GroupCollapseEventArgs e) 
    { 
        AbsListView.LayoutParams lp = new AbsListView.LayoutParams(AbsListView.LayoutParams.MatchParent, 70); 
        (sender as CustExpListview).LayoutParameters = lp; 
    } 
    
    private void SecondLevelexplv_GroupExpand(object sender, ExpandableListView.GroupExpandEventArgs e) 
    { 
        //expand the group and the height is the `children count` * `unit height` 
        AbsListView.LayoutParams lp = new AbsListView.LayoutParams(AbsListView.LayoutParams.MatchParent, 70 * 5); 
        (sender as CustExpListview).LayoutParameters = lp; 
    } 
    

したがって、それは正しく動作します:上

enter image description here

+0

ありがとうございました。 – user3034944

関連する問題