在 ListView 上长按打开上下文菜单

Open context menu on Longclick on ListView

我有一个简单的上下文菜单,我想制作一个 Toast 来显示一条短消息。

问题是我无法让项目 Position 显示我想要的特定详细信息,因为适配器的 Position 超出了范围。

这是我的代码:

public class MainActivity extends AppCompatActivity implements     View.OnClickListener {

private ArrayAdapter<Product> adapter;
private ListView listView;
private ContextMenu menu;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    listView = (ListView) findViewById(R.id.listView);
    adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1);
    listView.setAdapter(adapter);

    registerForContextMenu(listView);

    adapter.add(new Product("shoe", 150));
    adapter.add(new Product("T shirt", 80));
    adapter.add(new Product("pants", 100));
    adapter.add(new Product("lamp", 300));
    adapter.add(new Product("ball", 20));
    adapter.add(new Product("egg", 1));

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, final int position, long id) {
          Toast.makeText(MainActivity.this, adapter.getItem(position) + ": " + adapter.getItem(position).getPrice(), Toast.LENGTH_SHORT).show();

        }
    });

}


@Override
public void onClick(View v) {

}


@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
    menu.setHeaderTitle("choose what to do");
    menu.add(1, 0, 0, "product details");
    menu.add(1,1,1,"delete");

}

@Override
public boolean onContextItemSelected(MenuItem item) {
    switch (item.getItemId()){
        case 0:
            Toast.makeText(MainActivity.this, adapter... + ": " +  adapter..., Toast.LENGTH_SHORT).show();
            break;
    }
    return true;
}
}

我假设是因为你似乎想知道哪个项目被用户长按了,想知道项目的位置,以便你可以从 Adapter 或 List 中获取值。 如果我理解你正确的 PFB 解决方案

AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)item.getMenuInfo();
info.position;//This is your desired position.

现在你有了价值,可以玩了。开心!

编码愉快!!!