我想擴展BaseExpandableListAdapter,但是當我查看列表並選擇其中一個要展開的元素時,列表的順序就會顛倒過來。例如,如果我有一個包含4個元素的列表並選擇第一個元素,那麼順序(從頂部到底部)現在是4,3,2,1,第四個元素(現在在頂部)展開。如果我未展開第四個元素,則順序將恢復爲1,2,3,4而不會展開元素。Android擴展BaseExpandableListAdapter
這是我實現:
public class SensorExpandableAdapter extends BaseExpandableListAdapter {
private static final int FILTER_POSITION = 0;
private static final int FUNCTION_POSITION = 1;
private static final int NUMBER_OF_CHILDREN = 2;
ArrayList<SensorType> mParentGroups;
private Context mContext;
private LayoutInflater mInflater;
public SensorExpandableAdapter(ArrayList<SensorType> parentGroup, Context context) {
mParentGroups = parentGroup;
mContext = context;
mInflater = LayoutInflater.from(mContext);
}
@Override
public Object getChild(int groupPosition, int childPosition) {
// TODO Auto-generated method stub
if(childPosition == FILTER_POSITION) return "filter";
else return "function";
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
@Override
public View getChildView(int groupPosition, int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
if(convertView == null)
{
convertView = (RelativeLayout)mInflater.inflate(R.layout.sensor_row_list_item, parent, false);
if(childPosition == FILTER_POSITION) {
((CheckBox)convertView.findViewById(R.id.chkTextAddFilter)).setText("Add Filter");
} else {
((CheckBox)convertView.findViewById(R.id.chkTextAddFilter)).setText("Add Function");
((CheckBox)convertView.findViewById(R.id.chkTextAddFilter)).setEnabled(false);
}
}
return convertView;
}
@Override
public int getChildrenCount(int groupPosition) {
// TODO Auto-generated method stub
return NUMBER_OF_CHILDREN;
}
@Override
public Object getGroup(int groupPosition) {
return mParentGroups.get(groupPosition);
}
@Override
public int getGroupCount() {
// TODO Auto-generated method stub
return mParentGroups.size();
}
@Override
public long getGroupId(int groupPosition) {
// TODO Auto-generated method stub
return groupPosition;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
if(convertView == null)
{
convertView = mInflater.inflate(android.R.layout.simple_expandable_list_item_1, parent, false);
TextView tv = ((TextView)convertView.findViewById(android.R.id.text1));
tv.setText(mParentGroups.get(groupPosition).toString());
}
return convertView;
}
@Override
public boolean hasStableIds() {
// TODO Auto-generated method stub
return true;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
// TODO Auto-generated method stub
return true;
}
}
`
我只需要把我自己的SensorType類的簡單的ArrayList。所有課程的孩子都是一樣的,只有兩個。
另外,我該如何去做每組LongClickable中的父項?我已經在我的ExpandableListActivity中使用此getExpandableListView().setOnLongClickableListener() ...
進行了嘗試,並在父級TextView上設置了它的OnLongClickableListener,但都不起作用。
任何幫助都非常感謝!
就遇到了這個問題。這個修復它。您必須禁用convertView檢查或使其更健壯一些。在展開或摺疊列表之後,如果它看到convertView(表示列表中該位置的緩存項目)不爲null,它將重新填充列表,它將重新使用該舊視圖。 因此,您必須按照陳述刪除空檢查或進行進一步檢查,例如比較ids/tags/etc以確保您重新使用您想要重用的視圖。 – Dan 2011-03-21 02:53:59