标签: android-contextmenu

在多选模式下启用/禁用列表视图中的项目选择

我在多选模式下为上下文菜单注册了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)

android android-listview android-contextmenu

6
推荐指数
1
解决办法
7020
查看次数

片段中不适当的上下文菜单

我有一个带有导航抽屉和片段的活动.他们每个人都有自己的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

6
推荐指数
1
解决办法
9254
查看次数

我们如何为所有应用程序添加一个新的上下文菜单选项,当用户选择一个文本并长按它时会显示?

我们如何为所有应用程序添加一个新的上下文菜单选项,当用户选择一个文本并长按它时会显示?

假设我想为用户提供从离线词典中查找单词含义的能力,而无需离开他的应用程序上下文。

  1. 一般来说,要添加上下文菜单,我们会在特定的 TextView 对象上执行 registerForContextMenu。鉴于这需要适用于所有应用程序,我们如何添加上下文菜单选项?
  2. 如何阅读选定的文本?
  3. 如何在当前打开的应用程序顶部呈现弹出控件?

我对android开发很陌生。因此,任何详细的答案或对示例的指示都会有很大帮助。我假设这应该是可能的,因为应用程序“定义”、“定义离线词典”似乎做了一些与此类似的事情,如果不完全相同的话。在这些应用程序中,您可以选择文本并单击复制以查看文本的含义。

我所做的所有搜索都向我展示了如何为文本视图呈现上下文菜单或如何在上下文菜单处理程序中获取选定列表项的示例。但这没有帮助。

提前致谢。

android add-on android-contextmenu

6
推荐指数
1
解决办法
2526
查看次数

自定义弹出菜单

您好我必须创建一个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

5
推荐指数
1
解决办法
5440
查看次数

android:popupBackground 不适用于上下文菜单

为什么我的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)

xml android android-contextmenu

5
推荐指数
1
解决办法
3140
查看次数

在ListItem ContextMenu中获取所选项目

我有一个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项目.

android android-listview android-contextmenu

4
推荐指数
1
解决办法
8602
查看次数

如何使用onItemLongClick显示上下文菜单?

我试图在这里得到答案,但没有得到任何完美的答案.我想显示在上下文菜单中onItemLongClick,但没有成功,因为我同时使用onItemClickonItemLongClick

我正在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)

android android-contextmenu

4
推荐指数
1
解决办法
5436
查看次数

PopupWindow里面的WebView中的上下文菜单/窗口崩溃了应用程序?

我有一个包含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)

android android-webview android-contextmenu

4
推荐指数
1
解决办法
2861
查看次数

在Android中打开浮动菜单(上下文菜单)?

我创建了一个名为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)

android android-menu android-contextmenu

4
推荐指数
1
解决办法
9440
查看次数

使用OnContextItemSelected从ListView项检索文本

我有一个带有删除和类似选项的'经典'上下文菜单的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中检索文本时崩溃,正如我从日志中所知道的那样.

android listview android-contextmenu

3
推荐指数
1
解决办法
4507
查看次数