【问题标题】:How to Show Popup Menu near to Listview each item on Item Click Event?如何在项目单击事件上的 Listview 每个项目附近显示弹出菜单?
【发布时间】:2017-09-14 05:12:46
【问题描述】:

如何在 Item Click Event 上的 Listview 每个项目附近显示弹出菜单?

这是我的代码。我想在项目单击时在列表视图项目附近显示弹出菜单。但它只显示在底部。因此,请帮助我在单击的列表项附近显示弹出菜单。谢谢。

   package saro.example.com.task2_listview;

    import android.app.Dialog;
    import android.content.Context;
    import android.content.DialogInterface;
    import android.os.Build;
    import android.support.annotation.RequiresApi;
    import android.support.v7.app.AlertDialog;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;

    import android.view.ContextMenu;
    import android.view.Gravity;
    import android.view.LayoutInflater;
    import android.view.Menu;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.AdapterView;
    import android.widget.ArrayAdapter;
    import android.widget.ListView;
    import android.widget.ListAdapter;
    import android.widget.PopupWindow;
    import android.widget.TextView;
    import android.content.Context;
    import android.widget.Toast;
    import android.widget.PopupMenu;

    public class MainActivity extends AppCompatActivity {
        ListView list;
        @Override
        protected void onCreate(final Bundle savedInstanceState) {
            String[] mobileArray = {"Android", "IPhone", "WindowsMobile", "Blackberry",
                    "WebOS", "Ubuntu", "Windows7", "Max OS X","Android", "IPhone", "WindowsMobile", "Blackberry"};

            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);

            ArrayAdapter adapter = new ArrayAdapter<String>(this,
                    R.layout.activity_listview, mobileArray);

            list = (ListView) findViewById(R.id.mobile_list);
            list.setAdapter(adapter);

            list.setOnItemClickListener(new AdapterView.OnItemClickListener() {

                public void onItemClick(AdapterView<?> parent, View v, int position, long id) {

                    int pos = parent.getPositionForView(v);
                    Toast.makeText(getApplicationContext(),pos+"",Toast.LENGTH_SHORT).show();

                    PopupMenu popup = new PopupMenu(MainActivity.this, list);
                    popup.getMenuInflater().inflate(R.menu.popup_menu, popup.getMenu());
    //         
                    popup.show();

                }

            });
        }
    }

提前致谢。

【问题讨论】:

    标签: android listview


    【解决方案1】:

    来自PopupMenu (Context context, View anchor)

    锚视图:此弹出窗口的锚视图。 The popup will appear below the anchor如果有空间,如果没有空间,则在它之上。

    不要传递列表引用,而是使用v

     PopupMenu popup = new PopupMenu(MainActivity.this, v);
    

    因为v这里是视图

    AdapterView 中被点击的视图(这将是一个视图 由适配器提供)

    【讨论】:

    • 谢谢兄弟。它有效。
    • 仅供参考,我通过将鼠标悬停在查看时间范围,我发布了这个答案,首先休息是您接受最有用的答案的选择,快乐编码
    【解决方案2】:

    试试这个只是通过您的适配器视图v insted 或list 作为弹出菜单中的视图,如下代码所示

    使用这个 PopupMenu popup = new PopupMenu(MainActivity.this, v);

    插入 PopupMenu popup = new PopupMenu(MainActivity.this, list);

    代码

    list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    
                    public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
    
                        int pos = parent.getPositionForView(v);
                        Toast.makeText(getApplicationContext(),pos+"",Toast.LENGTH_SHORT).show();
    
                        PopupMenu popup = new PopupMenu(MainActivity.this, v);
                        popup.getMenuInflater().inflate(R.menu.popup_menu, popup.getMenu());
        //         
                        popup.show();
    
                    }
    
                });
    

    【讨论】:

    • 最欢迎@Saravana,您可以接受其中一个 ans,这样它也可以帮助其他人
    猜你喜欢
    • 2018-02-26
    • 2013-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多