gpt4 book ai didi

android - fragment 中的上下文操作模式 - 如果不集中则关闭?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:10:37 27 4
gpt4 key购买 nike

我在嵌套 fragment 中实现了上下文操作模式栏。此 fragment 是 View 寻呼机的一部分, View 寻呼机也是抽屉导航的 fragment 和一部分。

我的问题:如果 fragment 不再集中,我想关闭上下文操作模式栏。因此,如果我在 View 寻呼机中滑动,操作模式栏应该关闭。但是如果我使用嵌套 fragment 的onPause()方法,则不会直接调用该方法。通常它会等到我向前滑动两到三下...这是一些图片:

enter image description here

enter image description here

在第二张图片中,您可以看到操作模式栏仍然存在。所以我的问题是:我应该在哪个方法中调用我的 actionModeBar.finish() 方法,以便在我离开 fragment 时直接关闭操作模式栏?

也许 fragment 的代码可以帮助您:

public class EditorFragment extends Fragment {

private static final String KEY_POSITION="position";
ListView listView;
private boolean isMultipleList = false;
private ActionMode acMode;
private int counterChecked = 0;

private ActionMode.Callback modeCallBack = new ActionMode.Callback() {

public boolean onPrepareActionMode(ActionMode mode, Menu menu){
return false;
}

public void onDestroyActionMode(ActionMode mode) {
listView.clearChoices();
for (int i = 0; i < listView.getChildCount(); i++)
listView.setItemChecked(i, false);
listView.post(new Runnable() {
@Override
public void run() {
listView.setChoiceMode(ListView.CHOICE_MODE_NONE);
}
});
isMultipleList = false;
counterChecked = 0;
mode = null;
}

public boolean onCreateActionMode(ActionMode mode, Menu menu) {
mode.setTitle("1 Aufgabe");
mode.getMenuInflater().inflate(R.menu.actionmode, menu);
return true;
}

public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
switch (item.getItemId()) {
case R.id.actionmode_delete:
int choiceCount = listView.getCount();
SparseBooleanArray spBoolArray = listView.getCheckedItemPositions();

DBAufgaben db = new DBAufgaben(MainActivity.getMContext());
db.open();

for (int i = 0; i < choiceCount; i++) {
if(spBoolArray.get(i)){
db.deletContact(listView.getItemIdAtPosition(i));
}

}
Cursor cursor = db.getAllRecords();
AdapterEingang adapterE = new AdapterEingang(MainActivity.getMContext(), cursor, 0);
listView.setAdapter(adapterE);
db.close();
mode.finish();
break;
case R.id.actionmode_cancel:
mode.finish();
break;
}
return false;
}
};

//......//

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

View rootView = null;
int position = getArguments().getInt(KEY_POSITION, -1);

switch(position){
case 0:
rootView = inflater.inflate(R.layout.pager_list, null);
listView = (ListView) rootView.findViewById(R.id.pager_list);

Context context = MainActivity.getMContext();

DBAufgaben db = new DBAufgaben(context);

db.open();
Cursor cursor = db.getAllRecords();
AdapterEingang adapterE = new AdapterEingang(context, cursor, 0);
listView.setAdapter(adapterE);
db.close();

listView.setOnItemLongClickListener(new OnItemLongClickListener(){



@Override
public boolean onItemLongClick(AdapterView<?> adapterView, View view,
int position, long id) {
if(!isMultipleList){
acMode = MainActivity.getInstance().startActionMode(modeCallBack);
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
listView.setItemChecked(position, true);
isMultipleList = true;
counterChecked++;
setNewTitle();
} else {
listView.setItemChecked(position, true);
counterChecked++;
setNewTitle();
}

return true;
}

});
listView.setOnItemClickListener(new OnItemClickListener(){

@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position,
long id) {
Log.d(getTag(), "Datensatz: "+String.valueOf(id));
if(isMultipleList){
if(listView.isItemChecked(position)){
listView.setItemChecked(position, true);
counterChecked++;
setNewTitle();
} else {
listView.setItemChecked(position, false);
counterChecked--;
setNewTitle();
}

}

}

});
break;
default:
rootView = inflater.inflate(R.layout.frag_dummy, null);
TextView txt = (TextView) rootView.findViewById(R.id.dummy_txt);
txt.setText(String.valueOf(position));
break;
}



return(rootView);
}
public void setNewTitle(){
if(counterChecked == 1){
acMode.setTitle(counterChecked+" Aufgabe");
} else {
acMode.setTitle(counterChecked+" Aufgaben");
}
}
@Override
public void onPause(){
super.onPause();
if(isMultipleList){
acMode.finish();
}
}
}

最佳答案

ViewPagers 在任何时候都保持多个页面处于 Activity 状态(默认情况下,当前显示页面之前的页面和之后的页面),因此在您滑动两页之前不会调用 onPause()。

您最好的选择是使用 ViewPager.OnPageChangeListener ,并在 onPageSelected(..) 中显示和隐藏 ActionMode(即,如果所选页面不是具有 ActionMode 的页面,则隐藏 ActionMode)。您可能必须在托管 ViewPager 的 Activity 中实现它。

关于android - fragment 中的上下文操作模式 - 如果不集中则关闭?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18204386/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com