Android:listview上的Contextmenu始终选择列表中的最后一项

时间:2014-12-15 19:13:32

标签: android listview android-listview contextmenu

我创建了一个列表视图,其中包含从每个项目中的Mysql数据库中提取的多个值:

list = json.getJSONArray(TAG_CUST_TABLE);

                    // looping through All Products
                    for (int i = 0; i < list.length(); i++) {
                        JSONObject c = list.getJSONObject(i);

                        // Storing each json item in variable   
                        table = c.getString(TAG_TABLE);
                        String area = c.getString(TAG_AREA);
                        String user_name = c.getString(TAG_USER_NAME);
                        String city = c.getString(TAG_CITY);
                        HashMap<String, String> map = new HashMap<String, String>();
                        map.put(TAG_TABLE, table);
                        map.put(TAG_AREA, area);
                        map.put(TAG_USER_NAME, user_name);
                        map.put(TAG_CITY, city);
                        QueueList.add(map);
                    }
                } else {
                    //do something
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }

            //return "success";
            return null;
        }

       protected void onPostExecute(String file_url) {

            // updating UI from Background Thread
            runOnUiThread(new Runnable() {
                public void run() {
                    ListAdapter adapter = new SimpleAdapter(CustTable.this, List,
                            R.layout.cust_queue_list_view, new String[] { TAG_TABLE, TAG_AREA, TAG_USER_NAME, TAG_CITY},
                            new int[] {  R.id.table, R.id.area, R.id.uname, R.id.city});
                    // updating listview
                    setListAdapter(adapter);
                }
            });

        }

使用ContextMenu,我正在对listview的所选项目的值“table”执行操作。

   public boolean onContextItemSelected(MenuItem item) {    
         AdapterView.AdapterContextMenuInfo info= (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
         switch (item.getItemId()) {
                case 1:
                    UserFunctions userFunction_new = new UserFunctions();
                    @SuppressWarnings("unused")
                    JSONObject json_new = userFunction_new.deleteUser(user_id, table);
                    return(true);    
         }
     return(super.onOptionsItemSelected(item));
   }

但是,deleteUser函数始终处理listview中最后一项的“table”值。

有关如何在所选项目的“表格”值上进行此项工作的任何建议都会有所帮助。

另外,我想在每个deleteUser函数之后刷新listview。我尝试使用adapter.NotifyDataSetChanged();

但这不起作用。

1 个答案:

答案 0 :(得分:0)

我通过在ContextMenu部分中添加以下代码解决了这个问题(就在switch()行上方:HashMap<String,String> value = (HashMap<String, String>) getListAdapter().getItem(info.position); String table= value.get(TAG_TABLE);