Android 如何使动作模式与ListView一起工作
我正在尝试使用操作模式获取上下文菜单,在该模式下,我可以通过长时间单击列表视图中的项目来选择它。我根据创建了一个MultiChoiceListener,并制作了一个ItemLongClickListener,它将一个项目设置为选中状态,这是操作模式工作所需的 我的问题是,即使长时间单击的项目正在播放动画,动作菜单也不会膨胀 列表视图代码:Android 如何使动作模式与ListView一起工作,android,listview,android-inflate,action-menu,Android,Listview,Android Inflate,Action Menu,我正在尝试使用操作模式获取上下文菜单,在该模式下,我可以通过长时间单击列表视图中的项目来选择它。我根据创建了一个MultiChoiceListener,并制作了一个ItemLongClickListener,它将一个项目设置为选中状态,这是操作模式工作所需的 我的问题是,即使长时间单击的项目正在播放动画,动作菜单也不会膨胀 列表视图代码: final ListView listView = (ListView) findViewById(android.R.id.list); l
final ListView listView = (ListView) findViewById(android.R.id.list);
listView.setAdapter(adapter);
listView.setLongClickable(true);
listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long id) {
Cursor cursor = db.getSubject(id);
String subject = null;
try {
subject = cursor.getString(cursor.getColumnIndex("subject"));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Intent intent = new Intent(Main.this, Marks.class);
intent.putExtra("selected", subject);
startActivity(intent);
}
});
listView.setOnItemLongClickListener(new OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
listView.setItemChecked(arg2, true);
return true;
}
});
listView.setMultiChoiceModeListener(new MultiChoiceModeListener() {
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
// TODO Auto-generated method stub
return false;
}
@Override
public void onDestroyActionMode(ActionMode mode) {
// TODO Auto-generated method stub
}
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
MenuInflater inflater = mode.getMenuInflater();
inflater.inflate(R.menu.context, menu);
return true;
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
// TODO Auto-generated method stub
return false;
}
@Override
public void onItemCheckedStateChanged(ActionMode mode, int position,
long id, boolean checked) {
// TODO Auto-generated method stub
}
});
提前谢谢 我在那里没有看到任何实际启动动作模式的代码。这是您的OnItemLongClickListener需要做的事情,例如:
@Override
public boolean onItemLongClick(AdapterView<?> view, View row,
int position, long id) {
modeView.clearChoices();
modeView.setItemChecked(position, true);
if (activeMode == null) {
activeMode=host.startActionMode(this);
}
return(true);
}
可以在以下站点找到使用类似操作模式手动演示的完整示例项目:
请注意,此项目演示了如何通过ActionBarSherlock使用动作模式。我在其中没有看到任何实际启动动作模式的代码。这是您的OnItemLongClickListener需要做的事情,例如:
@Override
public boolean onItemLongClick(AdapterView<?> view, View row,
int position, long id) {
modeView.clearChoices();
modeView.setItemChecked(position, true);
if (activeMode == null) {
activeMode=host.startActionMode(this);
}
return(true);
}
可以在以下站点找到使用类似操作模式手动演示的完整示例项目:
注意,这个项目演示了如何通过ActionBarSherlock使用动作模式。Commonware的答案很好。如果您想要的是通过长时间单击选择一个元素的MultiChoiceModelListener,那么以下代码可能会帮助您:
public class MyFragment extends Fragment implements MultiChoiceModeListener{
private ListView mListView;
// ...
public void onViewCreated(View view, Bundle savedInstanceState) {
mListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
mListView.setMultiChoiceModeListener(this);
mListView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
mListView.setItemChecked(arg2, true);
}
});
}
在我的例子中,我只需单击一下,但您可以将OnItemClickListener更改为OnItemLongClickListener或任何其他您喜欢的选项。Commonware的答案非常好。如果您想要的是通过长时间单击选择一个元素的MultiChoiceModelListener,那么以下代码可能会帮助您:
public class MyFragment extends Fragment implements MultiChoiceModeListener{
private ListView mListView;
// ...
public void onViewCreated(View view, Bundle savedInstanceState) {
mListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
mListView.setMultiChoiceModeListener(this);
mListView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
mListView.setItemChecked(arg2, true);
}
});
}
在我的例子中,我只需单击一次,但您可以将OnItemClickListener更改为OnItemLongClickListener或任何其他您喜欢的选项。在谷歌示例中,没有单独的类处理ActionMode。我需要创建一个单独的类来使用它吗?@BlueHazard:这取决于你。您需要一些实现ActionMode.Callback的东西,以便与startActionMode一起使用。我选择把它委托给一个单独的班级。如果你想让你的活动实现ActionMode.Callback,那应该很好。为什么不实现MultichoiceModelListener并使用onCreateActionMode呢?@nurettin:OP可以。这是不够的。谷歌的例子中没有单独的类来处理ActionMode。我需要创建一个单独的类来使用它吗?@BlueHazard:这取决于你。您需要一些实现ActionMode.Callback的东西,以便与startActionMode一起使用。我选择把它委托给一个单独的班级。如果你想让你的活动实现ActionMode.Callback,那应该很好。为什么不实现MultichoiceModelListener并使用onCreateActionMode呢?@nurettin:OP可以。这是不够的。