android - 如何在项目单击事件的 ListView 附近显示弹出菜单?

标签 android listview

如何在 Item Click 事件中显示 ListView 每个项目附近的弹出菜单?

这是我的代码。我想在项目单击时显示靠近 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();

                }

            });
        }
    }

提前致谢。

最佳答案

来自 PopupMenu (Context context, View anchor)

anchor View: Anchor view for this popup. The popup will appear below the anchor if there is room, or above it if there is not.

使用 v

而不是传递列表引用
 PopupMenu popup = new PopupMenu(MainActivity.this, v);

因为v这里是 View

The view within the AdapterView that was clicked (this will be a view provided by the adapter)

关于android - 如何在项目单击事件的 ListView 附近显示弹出菜单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46210993/

相关文章:

android - 使用 robospice 在 ListView 中延迟加载图像

java - 在 Android 应用程序中创建本地数据库

java - 使 AsyncTask(或服务)不可终止(或接近它的东西)

android - 如何只为 View 设置触摸事件

java - Android 在 fragment 之间滑动

c# - 在 asp.net 中仅从 ListView 中获取最后一行值

android - 如何保存和恢复ListView的滚动位置和状态

android - 时间戳:如何识别CPU命令到达声卡的时间?

java - CustomArrayAdapter android 空指针异常

c# - ObservableCollection 更改后 ListView 未更新