OnItemClick 在列表视图中无法正常工作

Posted

技术标签:

【中文标题】OnItemClick 在列表视图中无法正常工作【英文标题】:OnItemClick not working properly in listview 【发布时间】:2015-01-09 21:52:12 【问题描述】:

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

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

 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);
            
        );

【问题讨论】:

我们不是通灵者,insertData()callSplash(view) 是什么? 我将继续告诉您,您的回答涉及以某种方式将您的位置合并到 insertData 中。此时,您没有使用 onItemClick 中的位置,这是区分项目的唯一方法 你写过 SimpleListAdapter 吗? 【参考方案1】:

很难准确地说出您期望它如何工作,但您的核心问题似乎是您忽略了 onItemClick 的“位置”参数。这是 android 告诉您点击了哪个项目的方式。您需要以某种方式将该参数或您首先从适配器获取的相应项目对象传递给您从 onItemClick 调用的函数:

this.insertData(position);

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

【讨论】:

以上是关于OnItemClick 在列表视图中无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

OnItemClick 如何从列表视图中获取单击项目的文本值

如何从列表视图中从 onItemClick() 获得的列表项的联系人 Uri 中检索数据?

Android:自定义列表视图无法正常工作

下拉列表在jquery datatable移动视图中无法正常工作

OnItemClick 永远不会被调用 ListView 中的按钮

在片段中与 onItemClick 斗争