這是一個在StackOverflow中稍微浮動的問題,並且在將此問題標記爲重複項之前,我知道this link。但是,這個問題很模糊,沒有代碼,似乎也沒有得到充分的回答。從ActionMode.Callback.onDestroyActionMode()刷新ListView
所以對我的問題:
我有一個ListFragment
(MainListFragment)認爲,onLongItemClick
,開闢了Contextual Action Bar
。此上下文操作欄中的一個菜單項允許刪除長按的ListView
項目。
在實現ActionMode.Callback
的類中,我可以刪除長按項目,但我需要ListView
在刪除後自行刷新,以便用戶不必切換片段以查看刪除的效果。
在這裏你可以看到我onLongItemClickListener
內MainListFragment
:
this.getListView().setOnItemLongClickListener(new OnItemLongClickListener(){
@Override
public boolean onItemLongClick(AdapterView<?> adapter, View view,
int pos, long id) {
// TODO Auto-generated method stub
Log.d("My Debug Bitches", "made it to the listener");
MainListContextualMenu menu = new MainListContextualMenu();
//view.startActionMode(menu);
ActionMode mode = getActivity().startActionMode(menu);
Object[] tags = new Object[2];
tags[0] = view.getRootView().getContext();
tags[1] = pos;
mode.setTag(tags);
//view.setSelected(true);
return true;
}
});
這裏是我的ActionMode.Callback-實現類:
public class MainListContextualMenu implements ActionMode.Callback{
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
// TODO Auto-generated method stub
switch(item.getItemId()){
case R.id.main_list_contextual_menu_delete:
//MainActivity activity = (MainActivity) mode.getCustomView().getContext();
//activity.getLists().remove(mode.getTag());
Object[] tags = (Object[]) mode.getTag();
MainActivity activity = (MainActivity) tags[0];
int index = (Integer) tags[1];
//Log.d("My Debug Bitches","" +index);
//Log.d("My Debug Bitches", "size before " + activity.getLists().size());
activity.getLists().remove(index);
//Log.d("My Debug Bitches", "size after " + activity.getLists().size());
break;
case R.id.main_list_contextual_menu_edit:
break;
}
return false;
}
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
// TODO Auto-generated method stub
MenuInflater inflater = mode.getMenuInflater();
inflater.inflate(R.menu.main_list_contextual_menu, menu);
Log.d("My Debug Bitches", "menu inflated");
return true;
}
@Override
public void onDestroyActionMode(ActionMode mode) {
// TODO Auto-generated method stub
Object[] tags = (Object[]) mode.getTag();
MainActivity activity = (MainActivity) tags[0];
ListView view = (ListView) activity.getCurrentFocus();
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
// TODO Auto-generated method stub
return false;
}
}
我已經用我的invalidateViews()
方法onDestroyActionMode()
內無濟於事嘗試,而且我見過別人推薦notifyDataSetChange()
。
但是,我不知道如何在ActionMode.Callback中使用這些解決方案。如果你看看我的onLongClick()
方法,我使用mode.setTag()
來通過被單擊的ListView項目的MainActivity
和position
。這是好的形式嗎?
我只是想能夠在ActionMode.Callback.onDestroyActionMode()
方法內刷新ListView
從MainListFragment
。
有沒有人得到這個工作之前,如果是這樣,他/她有什麼建議嗎?