android - Android:如何通过浮动上下文菜单项单击获取列表项属性
问题描述
我有一个带有 arraylist 声明的活动
private ArrayList<Product> products = new ArrayList<Product>();
在 onCreate 里面
products.add(new Product("Product One",100, 1));
products.add(new Product("Product Two",200, 2));
products.add(new Product("Product Three",170, 3));
products.add(new Product("Product Four",220, 4));
ProductAdapter itemsAdapter = new ProductAdapter(this, products);
ListView listView = (ListView) findViewById(R.id.list);
listView.setAdapter(itemsAdapter);
registerForContextMenu(listView);
在产品类中:
public class Product {
private String mProductName;
private int mProductPrice;
private int mProductId;
public Product(String productName, int productPrice, int productId){
mProductName = productName;
mProductPrice = productPrice;
mProductId = productId;
}
public String getProductName(){
return mProductName;
}
public int getProducId(){
return mProductId;
}
public int getProductPrice(){
return mProductPrice;
}
}
并且适配器很容易获取每个产品的名称和价格并查看列表。现在在活动中,我像这样创建上下文菜单
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.context_menu, menu);
}
使用“onContextItemSelected”从上下文菜单中选择 optipn 后,如何获取长按项目属性(如产品 ID)?
解决方案
首先设置一个全局变量productId,然后在listview长点击监听器上设置产品id。看看下面的示例代码。
int productId = 0;
lv.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener()
{
@Override
public boolean onItemLongClick(AdapterView<?> arg0,
View arg1,int pos, long id) {
// TODO Auto-generated method stub
Product product =
(Product)arg0.getAdapter().getItem(position)
productId = product.mProductId;
return false;
}
});
推荐阅读
- c# - 在其他方法中无法访问变量
- php - PayPal IPN 总是返回 INVALID?
- reactjs - 在反应中动态添加和删除输入字段
- google-bigquery - 查找要插入 BigQuery 的列名
- regex - 从逗号分隔的 cel 中仅获取 X 个字符串
- 64-bit - 在 Solaris 10 上将 pcre 3.38 编译为 64 位 - 错误的 ELF 类
- python - NLTK POS 标签:如何将“Word”及其对应的“POS 标签”放入 DataFrame
- r - 子集只会不断增加值到最大值
- ruby - Ruby:我用 JavaScript 编写的程序在 Ruby 中的工作方式不同
- c# - System.Diagnostics.Process.HasExited 始终返回 true,并且 Process.Exited 事件处理程序始终在进程仍处于打开状态时命中