我有一个树结构,其中节点是类别,如果他们有孩子和物品,如果没有。 我使用gridView和自定义适配器绘制了顶级类别。 我注册了一个单击事件处理程序,在其中更改树的级别并通知gridView数据已更改。为什么网格视图中的适配器没有更新其内容?
段:
gridview = (GridView) findViewById(R.id.gridview);
ma = new MenuAdapter(this, menu); //menu is the tree I pass to the adapter
gridview.setAdapter(ma);
gridview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v,
int position, long id) {
//ma.setSubTree(position);
menu = menu.children.get(position);
gridview.deferNotifyDataSetChanged();
gridview.invalidateViews();
Toast.makeText(MainActivity.this, "" + position,
Toast.LENGTH_SHORT).show();
}
});
使用标准输出调试它出现在树中的位置确实更新,但认为保持不变。 这使我相信我犯的错误是在适配器的getView方法中,但对于我来说我无法弄清楚。
getView根据每个树节点的数据膨胀一个自定义布局(图像缩略图和TextView)。
段:
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View gridView;
if (convertView == null) {
// if it's not recycled, initialize some attributes
gridView = new View(mContext);
gridView = inflater.inflate(R.layout.grid_item, null);
TextView textView = (TextView) gridView.findViewById(R.id.gridItemText);
textView.setPadding(15, 15, 15, 15);
textView.setText(menu.children.get(position).toString());
com.beardedhen.androidbootstrap.BootstrapCircleThumbnail thumb = (com.beardedhen.androidbootstrap.BootstrapCircleThumbnail) gridView.findViewById(R.id.thumb);
thumb.setImage(menu.children.get(position).imageSource);
} else {
gridView = (View) convertView;
}
return gridView;
}
任何帮助将不胜感激。
您不会使用'ExpandableListView'来创建一个** tree **结构吗? –
我不希望它扩大。我可能选择了错误的布局,但是一旦用户选择了一个类别,我希望只显示该类别,最好用项目图片。 – Dormage
可能是主细节设计?你有一个ListView或GridView的类别。当一个项目被点击时,另一个片段(细节)会替换主项目,显示选定的项目。 –