2017-04-07 19 views
0

私は3つのレベルの展開可能なリストビューで作業しています。すべては、展開可能なリストビューの2番目と3番目のレベルのテキストビューの幅が内容にラップしていて、レイアウトで指定したように親に一致しないと完全に期待しています。ここで拡張可能なリストビューでテキストビューを作成する方法MATCH_PARENT

は、親レベルのアダプターのための私のコードです:

public class ParentLevelAdapter extends BaseExpandableListAdapter 
{ 
    private final Context mContext; 
    private final List<String> mListDataHeader; 
    private final Map<String, List<String>> mListData_SecondLevel_Map; 
    private final Map<String, List<String>> mListData_ThirdLevel_Map; 
    private List<String> stringList = new ArrayList<>(); 
    Activity activity; 

    public ParentLevelAdapter(Context mContext, List<String> mListDataHeader) { 
     activity = (Activity) mContext; 
     this.mContext = mContext; 
     this.mListDataHeader = new ArrayList<>(); 
     this.mListDataHeader.addAll(mListDataHeader); 
     // SECOND LEVEL 
     String[] mItemHeaders = new String[0]; 
     mListData_SecondLevel_Map = new HashMap<>(); 
     int parentCount = mListDataHeader.size(); 
     mItemHeaders = mContext.getResources().getStringArray(R.array.items_array_expandable_level_two); 
     mListData_SecondLevel_Map.put(mListDataHeader.get(i), Arrays.asList(mItemHeaders)); 

     } 
     // THIRD LEVEL 
     String[] mItemChildOfChild; 
     mListData_ThirdLevel_Map = new HashMap<>(); 
     for (Object o : mListData_SecondLevel_Map.entrySet()) { 
      Map.Entry entry = (Map.Entry) o; 
      Object object = entry.getValue(); 
      if (object instanceof List) { 
       Collections.addAll(stringList, (String[]) ((List) object).toArray()); 
       mItemChildOfChild = mContext.getResources().getStringArray(R.array.items_array); 
       } 
      } 
     } 
    } 

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

    @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 CustomExpandableListView secondLevelExpListView = new CustomExpandableListView(this.mContext); 
     String parentNode = (String) getGroup(groupPosition); 
     secondLevelExpListView.setAdapter(new SecondLevelAdapter(this.mContext, mListData_SecondLevel_Map.get(parentNode), mListData_ThirdLevel_Map)); 
     secondLevelExpListView.setGroupIndicator(null); 
     secondLevelExpListView.setOnGroupExpandListener(new ExpandableListView.OnGroupExpandListener() { 
      int previousGroup = -1; 

      @Override 
      public void onGroupExpand(int groupPosition) { 
       if (groupPosition != previousGroup) 
        secondLevelExpListView.collapseGroup(previousGroup); 
       previousGroup = groupPosition; 
      } 
     }); 

     secondLevelExpListView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() { 
      @Override 
      public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { 

       return false; 
      } 
     }); 
     return secondLevelExpListView; 
    } 

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

    @Override 
    public Object getGroup(int groupPosition) { 
     return this.mListDataHeader.get(groupPosition); 
    } 

    @Override 
    public int getGroupCount() { 
     return this.mListDataHeader.size(); 
    } 

    @Override 
    public long getGroupId(int groupPosition) { 
     return groupPosition; 
    } 

    @Override 
    public View getGroupView(int groupPosition, boolean isExpanded,View convertView, ViewGroup parent) { 
     String headerTitle = (String) getGroup(groupPosition); 
     if (convertView == null) { 
      LayoutInflater layoutInflater = (LayoutInflater) this.mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      convertView = layoutInflater.inflate(R.layout.expandable, parent, false); 
     } 
     TextView lblListHeader = (TextView) convertView.findViewById(R.id.lblListHeader); 
     lblListHeader.setText(headerTitle); 

     return convertView; 
    } 

    @Override 
    public boolean hasStableIds() { 
     return true; 
    } 

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

第2レベルアダプターコード:

public class SecondLevelAdapter extends BaseExpandableListAdapter 
{ 
    private final Context mContext; 
    private final List<String> mListDataHeader; 
    private final Map<String, List<String>> mListDataChild; 

    public SecondLevelAdapter(Context mContext, List<String> mListDataHeader, Map<String, List<String>> mListDataChild) { 
     this.mContext = mContext; 
     this.mListDataHeader = mListDataHeader; 
     this.mListDataChild = mListDataChild; 
    } 

    @Override 
    public Object getChild(int groupPosition, int childPosition) { 
     return this.mListDataChild.get(this.mListDataHeader.get(groupPosition)).get(childPosition); 
    } 

    @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 String childText = (String) getChild(groupPosition, childPosition); 

     if (convertView == null) { 
      LayoutInflater layoutInflater = (LayoutInflater) this.mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      convertView = layoutInflater.inflate(R.layout.expandable_third, parent, false); 
     } 
     TextView txtListChild = (TextView) convertView.findViewById(R.id.lblListThird); 
     txtListChild.setText(childText); 
     return convertView; 
    } 

    @Override 
    public int getChildrenCount(int groupPosition) { 
     try { 
      return this.mListDataChild.get(this.mListDataHeader.get(groupPosition)).size(); 
     } catch (Exception e) { 
      return 0; 
     } 
    } 

    @Override 
    public Object getGroup(int groupPosition) { 
     return this.mListDataHeader.get(groupPosition); 
    } 

    @Override 
    public int getGroupCount() { 
     return this.mListDataHeader.size(); 
    } 

    @Override 
    public long getGroupId(int groupPosition) { 
     return groupPosition; 
    } 

    @Override 
    public View getGroupView(int groupPosition, boolean isExpanded,View convertView, ViewGroup parent) { 
     String headerTitle = (String) getGroup(groupPosition); 
     if (convertView == null) { 
      LayoutInflater layoutInflater = (LayoutInflater) this.mContext 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      convertView = layoutInflater.inflate(R.layout.expandable_list_second, parent, false); 
     } 
     TextView lblListHeader = (TextView) convertView 
       .findViewById(R.id.lblListItem); 
     lblListHeader.setText(headerTitle); 
     return convertView; 
    } 

    @Override 
    public boolean hasStableIds() { 
     return true; 
    } 

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

と一つだけのテキストボックスが

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical"> 

<TextView 
    android:id="@+id/lblListThird" 
    android:layout_width="match_parent" 
    android:layout_height="@dimen/_35sdp" 
    android:textColor="@color/colorWhite" 
    android:paddingLeft="@dimen/_20sdp" 
    android:layout_marginTop="@dimen/_10sdp" 
    android:textSize="25sp" 
    android:layout_gravity="center" 
    android:gravity="center|start" /> 
で含まれている私のリスト行のコード

もっと正確に言うと、私は何を言おうとしているのかをはっきりと見せる画像をアップロードしています。それを見てください。開発者のオプションから「レイアウトレイアウトの表示」をオンにしました。これは、テキストビューがテキストの内容をラップしていて、親に一致していないことを示しています。テキストの長さだけでなく、全体を通してクリック可能にしたいと思っています。 enter image description here

私が間違っていることを教えてください。これを解決するために何が必要かを教えてください。

答えて

0

これを現在または将来表示しているすべてのユーザー向けです。私は幅を計算するコードを取り除いて解決しました。私はこれが正しい道であるかどうかはわかりませんが、仕事は終わりです。コードスニペットは次のとおりです。

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) 
{ 
    heightMeasureSpec = MeasureSpec.makeMeasureSpec(999999, MeasureSpec.AT_MOST); 
    super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
} 
関連する問題