OnItemClick在listview中无法正常工作

时间:2014-11-12 21:47:02

标签: android listview listadapter onitemclick

使用以下代码,当选择列表中的项目时,它会更新数据表。问题是当列出了多个项目时,无论选择哪个项目,它总是更新显示的第一个列出的项目而不是选择的项目。提前谢谢!

编辑-更新。合并(位置)并试图简化一些代码。仍然不会捕获所选项目,总是返回列表视图上显示的顶部项目,无论如何。 DB控制器工作正常,除此之外一切都很好......

 setContentView(R.layout.list_messages);

    ArrayList<HashMap<String, String>> phraseList = controller
            .getUnreadMessage();

        ListView lv = getListView();

        ListAdapter adapter = new SimpleAdapter(
                ReadUnReadMessages.this,
                phraseList,
                R.layout.view_list_messages,
                new String[] { "mFromName", "mToAddress", "mBody",
                        "mToName", "messageTime", "mFromAddress", "mRead",
                        "messageId" },
                new int[] { R.id.messageFrom, R.id.messageToAdd,
                        R.id.messageBody, R.id.messageTo, R.id.messageTime,
                        R.id.messageFromAdd, R.id.readCode, R.id.messageId });
        setListAdapter(adapter);

        lv.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long arg) {
                @SuppressWarnings("unchecked")
                HashMap<String, String> queryValues = (HashMap<String, String>)parent.getItemAtPosition(position);
                messageBody = (TextView) findViewById(R.id.messageBody);
                readCode = (TextView) findViewById(R.id.readCode);
                messageId = (TextView) findViewById(R.id.messageId);

                String readCode = "1";
                queryValues
                        .put("messageId", messageId.getText().toString());
                queryValues.put("mRead", readCode);
                queryValues.put("mBody", messageBody.getText().toString());

                controller.markMessage(queryValues);

                this.callSplash(view);
            }


            public void callSplash(View view) {

                Intent objSplash = new Intent(getApplicationContext(),
                        Splash.class);
                startActivity(objSplash);
            }
        });

1 个答案:

答案 0 :(得分:0)

很难准确地说出你期望它如何发挥作用,但看起来你的核心问题是你忽视了这个位置&#39; onItemClick的参数。这是Android的方式告诉您单击了哪个项目。不知何故,您需要将该参数,或者您从适配器首先获取的相应项目对象传递给您从onItemClick调用的函数:

this.insertData(position);

否则这些函数必须猜测单击了哪个项目。显然这就是他们正在做的事情:他们假设第一个项目被点击了。