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