這似乎很簡單,但對於我的生活我無法弄清楚這一點。焦點在ExpandableListView中添加了項目
我有一個ExpandableListView,它具有BaseExpandListListAdapter後裔的自定義ExpandableListAdapter。當我添加一個新項目時,我只想集中新項目。我無法讓它工作。
我嘗試了以下方法,但這不起作用。這是使用ListView活動:
private void processNewItem(C360ItemOwner itemOwner, int pos){
Item item = itemOwner.newItem(pos);
expAdapter.notifyDatasetChanged();
expandList.requestFocus();
if (item.getParentType() == Item.PARENT_IS_CHECKLIST) {//main level
expandList.setSelectedGroup(pos);
} else //Item.PARENT_IS_ITEM //sub level
expandList.setSelectedChild(item.getParentAsItem().getPosition(), pos, true);
}
我試圖在getView方法,適配器做它不工作:
public View getGroupView(int groupPosition, boolean isExpanded, View convertView,
ViewGroup parent) {
if (convertView == null)
convertView = inf.inflate(R.layout.edit_group_item, null);
Item group = (Item) getGroup(groupPosition);
convertView.setTag(group);
EditText edtParent = (EditText) convertView.findViewById(R.id.edtParent);
edtParent.setTag(convertView);
scatterItemText(edtParent);
if (group.isNew()) {
Toast.makeText(edtParent.getContext(), "Found Focus Item " + groupPosition, Toast.LENGTH_SHORT).show();
edtParent.requestFocus();
}
return convertView;
}
我試圖建立幾個字段在適配器:focusItem,一個只寫Item對象和focusEdit,只讀EditText obect。所以我分配的項目,並在getView中,它將編輯存儲在一個字段中。我這樣稱呼它:
private void processNewItem(C360ItemOwner itemOwner, int pos){
Item item = itemOwner.newItem(pos);
expAdapter.setFocusItem(item);//<--Assign it here
expAdapter.notifyDatasetChanged();
EditText edtFocus = expAdapter.getFocusEdit();
if (edtFocus != null)
edtFocus.requestFocus();
}
然後在適配器的getView:
public View getGroupView(int groupPosition, boolean isExpanded, View convertView,
ViewGroup parent) {
if (convertView == null)
convertView = inf.inflate(R.layout.edit_group_item, null);
Item group = (Item) getGroup(groupPosition);
convertView.setTag(group);
EditText edtParent = (EditText) convertView.findViewById(R.id.edtParent);
edtParent.setTag(convertView);
scatterItemText(edtParent);
if (group == focusItem) {
Toast.makeText(edtParent.getContext(), "Found Focus Item " + groupPosition, Toast.LENGTH_SHORT).show();
focusEdit = edtParent;
}
return convertView;
}
我是爲這最後的方法,但此行很有希望:
EditText edtFocus = expAdapter.getFocusEdit();
發生getView BEFORE ()方法運行,它會分配它(所以它始終爲空)! :-(PLZ HALP
編輯:我知道,如果我不跑了線程等待幾百毫秒,使getView()可能會運行,然後試圖讓focusEdit這將是草率的,但什麼
你不需要一個線程來暫停。看看'Handler.postDelayed(Runnable r,int delay);' – FoamyGuy
「我嘗試了以下,這不起作用」爲什麼這不起作用?不要去適配器getView方向 –
@FoamyGuy我會嘗試 –