2016-09-13 7 views
0

子表示でExpandableListView問題:6groupsの6childrenアンドロイド - 私はFIXEコンテンツとExpandableListViewを作っ

インデックスグループ/子供が同じ

グループが正しく表示されているように、各グループは一つだけの子供を持っていますが、とき私はそれでもまだ最後のものを持っている子供を選びます。私は子供をロードするために2回クリックしなければならないことを意味:

  • オープングループ - >別のグループにロードされた最後の子をロードし
  • 閉じる/開いている同じグループ - >このグループの良い子をロード
ここで

クラッセのBaseAdapterです:

public class CmsAdapter extends BaseExpandableListAdapter { 

private Cms mCms; 
private List<String> mGroups = new ArrayList<>(); 
private List<String> mChilds = new ArrayList<>(); 
private WeakReference<Context> mContext; 

public CmsAdapter(@NonNull Context context, Cms cms) { 
    mCms = cms; 
    mContext = new WeakReference<>(context); 

    // Construct the lists of data 
    for (Section section : mCms.getSections()) { 
     mGroups.add(section.getTitle()); 
     mChilds.add(section.getContent()); 
    } 
} 

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

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

@Override 
public Object getGroup(int i) { 
    return mGroups.get(i); 
} 

@Override 
public Object getChild(int i, int i1) { 
    return mChilds.get(i); 
} 

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

@Override 
public long getChildId(int i, int i1) { 
    return i; 
} 

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

@Override 
public View getGroupView(int position, boolean b, View view, ViewGroup viewGroup) { 

    CmsHeaderHolder headerHolder; 

    if (view == null) { 
     // inflate the layout 
     LayoutInflater inflater = LayoutInflater.from(mContext.get()); 
     view = inflater.inflate(R.layout.item_cms_group, viewGroup, false); 

     headerHolder = new CmsHeaderHolder(view); 

     view.setTag(headerHolder); 
    } else { 
     headerHolder = (CmsHeaderHolder) view.getTag(); 
    } 

    headerHolder.mTextView.setText(mGroups.get(position)); 

    return view; 
} 

@Override 
public View getChildView(int groupPosition, int childPosition, boolean b, View view, ViewGroup viewGroup) { 

    CmsContentHolder contentHolder; 
    if (view == null) { 
     LayoutInflater inflater = LayoutInflater.from(mContext.get()); 
     view = inflater.inflate(R.layout.item_cms_child, viewGroup, false); 

     contentHolder = new CmsContentHolder(view); 

     view.setTag(contentHolder); 
    } else { 
     contentHolder = (CmsContentHolder) view.getTag(); 
    } 

    // Need to add charset for accented and special characters 
    contentHolder.mWebView.loadData(createHtmlContent(groupPosition), "text/html; charset=utf-8", "utf-8"); 

    return view; 
} 

@Override 
public boolean isChildSelectable(int i, int i1) { 
    return false; 
} 

private String createHtmlContent(int position) { 

    String cssString = SharedPreferencesHelper.getStringPref(Constants.SharedPreferenceTags.CSS_STYLE); 
    if (cssString == null || cssString.isEmpty()) { 
     cssString = Constants.Css.defaultCss; 
    } 

    // Construct the html content with css string 
    StringBuilder html = new StringBuilder(); 
    html.append("<!DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Transitional//EN\"\n" + 
      "  \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n" + 
      "<html xmlns=\"http://www.w3.org/1999/xhtml\"><head>"); 
    html.append(cssString); 
    html.append("</head><body>"); 
    html.append(mChilds.get(position)); 
    html.append("</body></html>"); 

    return html.toString(); 
} 

public class CmsContentHolder { 

    public WebView mWebView; 

    public CmsContentHolder(View itemView) { 
     mWebView = (WebView) itemView.findViewById(R.id.wv_cms); 
     // set default encoding just in case. 
     WebSettings webSettings = mWebView.getSettings(); 
     webSettings.setDefaultTextEncodingName("utf-8"); 
     webSettings.setJavaScriptEnabled(true); 
     webSettings.setAllowFileAccess(true); 
     mWebView.setWebChromeClient(new WebChromeClient()); 
    } 
} 

public class CmsHeaderHolder { 

    public TextView mTextView; 

    public CmsHeaderHolder(View itemView) { 
     mTextView = (TextView) itemView.findViewById(R.id.tv_cms); 
    } 
} 

}

答えて

0

だけreinstanにしてみてくださいtiateすべての子供とcreateHtmlContent方法

@Override 
public View getChildView(int groupPosition, int childPosition, boolean b, View view, ViewGroup viewGroup) { 

    CmsContentHolder contentHolder; 
     LayoutInflater inflater = LayoutInflater.from(mContext.get()); 
     view = inflater.inflate(R.layout.item_cms_child, viewGroup, false); 

     contentHolder = new CmsContentHolder(view); 

    // Need to add charset for accented and special characters 
    contentHolder.mWebView.loadData(createHtmlContent(childPosition), "text/html; charset=utf-8", "utf-8"); 

    return view; 
} 
+0

にパラメータとしてchildPositionを送信すると、「childPosition」は常に0になります。子リスト内の子の位置は、グループリスト内のグループと同じです。そして、もし私が子供の所有者がそのバグを修正するたびに元気づけるなら、そうです。しかし、リストは本当に遅くなり、役に立たない –

関連する問題