我在多选模式下为上下文菜单注册了listview:
private void initListViewForContextMenu(){
log.d("FilesFragment", "initListViewForContextMenu()");
ListView listView = getListView();
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
listView.setMultiChoiceModeListener(new MultiChoiceModeListener() { ...
Run Code Online (Sandbox Code Playgroud)
问题是我的视图中的所有项目都不应该是可选择的,只有那些显示特殊图标的项目才可供选择.我不知道如何实现这个,我定义了一个OnItemLongClickListener:
getListView().setOnItemLongClickListener(new OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> adapter, View view, int position, long id) {
Log.d("FilesFragment", "OnItemLongClickListener.onItemLongClick at pos " + position);
PfmDocument doc = (PfmDocument)adapter.getItemAtPosition(position);
if (doc.isOnBasket()){
Log.d("FilesFragment", "OnItemLongClickListener.onItemLongClick detected in basket");
ListView lv = (ListView) adapter;
lv.setItemChecked(position, false);
}
return false;
}
});
Run Code Online (Sandbox Code Playgroud)
但这个监听器从未被调用过.
我还尝试OnLongClickListener在适配器中设置一个行视图,但即使关闭上下文菜单(不在选择模式下),也会禁用正常单击.
if (doc.isOnBasket()){
rowView.setOnLongClickListener(new OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
return …Run Code Online (Sandbox Code Playgroud) 我有一个带有导航抽屉和片段的活动.他们每个人都有自己的ListView和上下文菜单.
导航抽屉内的上下文菜单工作正常.
问题在于片段内的菜单.当我进入片段的上下文菜单时,会显示两个导航抽屉菜单和片段的菜单.
活动的方法
@Override
protected void onCreate(Bundle savedInstanceState) {
registerForContextMenu(mDrawerList); // mDrawrList is the navigation drawer's ListView
}
@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
switch(item.getItemId()) {
case R.id.action_edit:
// Do some stuff
return true;
case R.id.action_delete:
// Do some stuff
return true;
}
return super.onContextItemSelected(item);
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.drawer, menu);
}
Run Code Online (Sandbox Code Playgroud)
片段的方法
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, …Run Code Online (Sandbox Code Playgroud) android android-fragments android-contextmenu navigation-drawer
我们如何为所有应用程序添加一个新的上下文菜单选项,当用户选择一个文本并长按它时会显示?
假设我想为用户提供从离线词典中查找单词含义的能力,而无需离开他的应用程序上下文。
我对android开发很陌生。因此,任何详细的答案或对示例的指示都会有很大帮助。我假设这应该是可能的,因为应用程序“定义”、“定义离线词典”似乎做了一些与此类似的事情,如果不完全相同的话。在这些应用程序中,您可以选择文本并单击复制以查看文本的含义。
我所做的所有搜索都向我展示了如何为文本视图呈现上下文菜单或如何在上下文菜单处理程序中获取选定列表项的示例。但这没有帮助。
提前致谢。
您好我必须创建一个PopUp菜单,我知道如何做到这一点.
这是我创建默认PopUp菜单的代码..
popup_menu.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/item"
android:showAsAction="ifRoom|withText"
android:title="item1"
android:visible="true"/>
<item
android:id="@+id/item2"
android:showAsAction="ifRoom|withText"
android:title="item2"
android:visible="true"/>
<item
android:id="@+id/item3"
android:showAsAction="ifRoom|withText"
android:title="item3"
android:visible="true"/>
Run Code Online (Sandbox Code Playgroud)
PopUpMenu_Activity.java
findViewById(R.id.btn_click).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
PopupMenu popupMenu = new PopupMenu(PopMenuActivity.this, view);
popupMenu.setOnMenuItemClickListener(PopMenuActivity.this);
popupMenu.inflate(R.menu.popup_menu);
popupMenu.show();
}
});
Run Code Online (Sandbox Code Playgroud)
和
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.item1:
Toast.makeText(this, "item1 clicked", Toast.LENGTH_SHORT).show();
return true;
case R.id.item2:
Toast.makeText(this, "item2 clicked", Toast.LENGTH_SHORT).show();
return true;
case R.id.item3:
Toast.makeText(this, "item3 clicked", Toast.LENGTH_SHORT).show();
return true;
default:
return false;
}
} …Run Code Online (Sandbox Code Playgroud) android android-menu android-contextmenu android-popupwindow
为什么我的styles.xml代码成功更改了我的操作栏溢出菜单的背景颜色,但无法更改我的应用程序中上下文菜单的背景颜色?
<style name="AppBaseTheme" parent="Theme.AppCompat.Light">
<!--<item name="android:actionBarStyle">@style/DarkActionBar</item> -->
</style>
<!-- Application theme. -->
<style name="AppTheme" parent="AppBaseTheme">
<!-- All customizations that are NOT specific to a particular API-level can go here. -->
<item name="android:popupMenuStyle">@style/MyPopupMenu</item>
<item name="android:itemTextAppearance">@style/MyCustomMenuTextAppearance</item>
</style>
<!-- Popup Menu Background Color styles -->
<!-- <style name="MyPopupMenu" parent="@android:style/Widget.Holo.ListPopupWindow"> -->
<!-- <style name="MyPopupMenu" parent="@android:style/Widget.PopupMenu"> -->
<style name="MyPopupMenu" parent="@style/Widget.AppCompat.PopupMenu">
<item name="android:popupBackground">@color/dark_gray</item>
</style>
<!-- Popup Menu Text Color styles -->
<style name="MyCustomMenuTextAppearance">
<item name="android:textColor">@color/white</item>
</style>
Run Code Online (Sandbox Code Playgroud)
我已经坚持了几个小时,并且针对类似问题的 SO 上的解决方案都没有对我有用。
如果有帮助,这是我创建上下文菜单的 Java 代码:
@Override
public …Run Code Online (Sandbox Code Playgroud) 我有一个ListView,它可以长按其中一个元素创建一个ContextMenu.如何找到在创建此上下文菜单的ListView中选择的元素(而不是选定的MenuItem)?这是我的代码:
list.setOnCreateContextMenuListener(new OnCreateContextMenuListener() {
@Override
public void onCreateContextMenu(ContextMenu menu, final View v,
ContextMenuInfo menuInfo) {
menu.setHeaderTitle("Actions");
android.view.MenuItem remove = menu.add("Remove");
final int selectedItem = ((ListView)v).getSelectedItemPosition();
remove.setOnMenuItemClickListener(new OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(android.view.MenuItem item) {
doSomething(listAdapter.getItem(selectedItem)); // NPE here
return true;
}
});
}
});
Run Code Online (Sandbox Code Playgroud)
请注意,我不想要从上下文菜单中选择的项目,而是需要触发此上下文菜单的ListView项目.
我试图在这里得到答案,但没有得到任何完美的答案.我想显示在上下文菜单中onItemLongClick,但没有成功,因为我同时使用onItemClick和onItemLongClick
我正在onItemClick用来开始一项新的活动,但两者都没有成功.
这是代码
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.all_contacts);
contactList = new ArrayList<HashMap<String,String>>();
new LoadAllContacts().execute();
registerForContextMenu(getListView());
ListView listView = getListView();
listView.setOnItemLongClickListener(new OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view,
int postion, long id) {
registerForContextMenu( view );
openContextMenu( view );
return true;
}
});
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int postion, long id) {
Intent intent = new Intent(AllContactsActivity.this, editContactActivity.class);
}
});
}
@Override
protected …Run Code Online (Sandbox Code Playgroud) 我有一个包含WebView的PopupWindow打开Facebook页面的应用程序,任何上下文菜单如:WebView中的文本字段上的自动完成,甚至是长按,应该显示用户复制/粘贴/剪切的选项立即崩溃应用程序跟随错误:
FATAL EXCEPTION: main
android.view.WindowManager$BadTokenException: Unable to add window -- token android.view.ViewRootImpl$W@418cdab0 is not valid; is your activity running?
at android.view.ViewRootImpl.setView(ViewRootImpl.java:700)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:345)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:224)
at android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:149)
at android.view.Window$LocalWindowManager.addView(Window.java:554)
at android.widget.PopupWindow.invokePopup(PopupWindow.java:1013)
at android.widget.PopupWindow.showAtLocation(PopupWindow.java:856)
at android.widget.PopupWindow.showAtLocation(PopupWindow.java:820)
at android.webkit.WebViewClassic$PastePopupWindow.show(WebViewClassic.java:971)
at android.webkit.WebViewClassic.showPasteWindow(WebViewClassic.java:7037)
at android.webkit.WebViewClassic.access$10300(WebViewClassic.java:235)
at android.webkit.WebViewClassic$PrivateHandler.handleMessage(WebViewClassic.java:11376)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4921)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1027)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794)
at dalvik.system.NativeStart.main(Native Method)
Run Code Online (Sandbox Code Playgroud)
注意:我对该问题的理解是,上下文菜单/窗口实际上显示在应用程序本身的范围内,而不是使用另一个PopWindow(由Core WebView类生成的自动)在WebView内部,此类错误地引用了上下文.
我的守则如下:
main.xml中
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<Button
android:id="@+id/openpopup"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Open …Run Code Online (Sandbox Code Playgroud) 我创建了一个名为drmenu.xml的新菜单.当我按下菜单按钮时它可以正常工作,但我需要在用户按下按钮时打开上下文菜单.下面的代码按钮只显示吐司.
这是我的xml布局:
<LinearLayout
android:id="@+id/MenuCall"
android:layout_width="90dip"
android:layout_height="match_parent"
android:gravity="right|center_vertical" >
<ImageView
android:id="@+id/MenuCall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/imageiew6" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
这是我的java代码:
final LinearLayout callback_var = (LinearLayout) findViewById(R.id.MenuCall);
registerForContextMenu(callback_var);
callback_var.setOnClickListener(new android.view.View.OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Toast.makeText(getApplicationContext(), "this is repeated", Toast.LENGTH_LONG).show();
openContextMenu(callback_var);
}
Run Code Online (Sandbox Code Playgroud) 我有一个带有删除和类似选项的'经典'上下文菜单的ListView.由于我从SharedPreferences对象中删除,我需要检索密钥,这是设置到ListView项目中的文本.
我试过以下代码:
@Override
public boolean onContextItemSelected(MenuItem item){
AdapterContextMenuInfo saved = (AdapterContextMenuInfo) item.getMenuInfo();
TextView view = (TextView)findViewById((int) saved.id);
Log.d("DEBUG:", "before key");
String key = view.getText().toString();
Log.d("DEBUG:", "after...");
switch (item.getItemId()){
case R.id.conmenu_delete:
return true;
case R.id.conmenu_copy:
return true;
case R.id.conmenu_send:
return true;
default:
return super.onContextItemSelected(item);
}
}
Run Code Online (Sandbox Code Playgroud)
但是,不幸的是,它在尝试从View中检索文本时崩溃,正如我从日志中所知道的那样.