自定义列表视图点击监听器无法正常工作

时间:2017-12-23 20:11:06

标签: android listview android-adapter custom-adapter

我只需要帮助查看listview点击列表器中的棘手情况。问题是我已经使用来自远程服务器的自定义适配器填充了listview。我的列表视图包含4个元素2个图像和2个textview,因此listview正在从数据库中完美加载,但问题是我希望listview仅在特定条件匹配时才能工作。看看我的代码:

   if (convertView == null) {

            convertView = inflater.inflate(resource, null);

        }


        ImageView team1_photo,team2_photo;
        TextView tournament;


        team1_photo = (ImageView) convertView.findViewById(R.id.team1);
        team2_photo = (ImageView) convertView.findViewById(R.id.team2);
        tournament=(TextView) convertView.findViewById(R.id.tournament);
        status=(TextView) convertView.findViewById(R.id.status);



        ImageLoader.getInstance().displayImage(live_conveyerList.get(position).getTeam1_photo(), team1_photo);
        ImageLoader.getInstance().displayImage(live_conveyerList.get(position).getTeam2_photo(), team2_photo);
        tournament.setText(live_conveyerList.get(position).getTournament());
        status.setText(live_conveyerList.get(position).getStatus());


        liveListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

                                                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                                                    switch (position) {
                                                        case 0:
                                                            if(status.getText().equals("play on"))
                                                            {
                                                                Toast.makeText(getActivity(),"Result will be declared shortly",Toast.LENGTH_LONG).show();


                                                            }
                                                            else {
                                                                Intent fix1 = new Intent(getActivity(), Leaderboard.class);
                                                                startActivity(fix1);
                                                            }
                                                            break;
                                                        case 1:

                                                            if(status.getText().equals("play on"))
                                                        {

                                                            Toast.makeText(getActivity(), "Result will be declared shortly", Toast.LENGTH_LONG).show();


                                                        }
                                                        else{

                                                                Intent fix2 = new Intent(getActivity(), Leaderboard_1.class);
                                                                startActivity(fix2);

                                                            }
                                                            break;

                                                        default:


                                                    }

                                                    getActivity().overridePendingTransition(R.anim.activity_in, R.anim.activity_out);


                                                }
                                            }


        );



        return convertView;
    }
}

所以在这里,status是textviews之一,它有两种输出类型。一个是“玩”,另一个是“玩”,所以我只想在那个特殊的行中填充游戏时才开启新的活动。埃尔斯,应该只有一个祝酒词, 但它不适合我。任何帮助都会很好,谢谢。

我的json是这样的

{"list":[{"tournament":"Xavier college League","team1_photo":"http:\/\/thehostels.in\/judgement_files\/images\/India.png","team2_photo":"http:\/\/thehostels.in\/judgement_files\/images\/Australia.png","status":"play on"},{"tournament":"ITM college League","team1_photo":"http:\/\/thehostels.in\/judgement_files\/images\/India.png","team2_photo":"http:\/\/thehostels.in\/judgement_files\/images\/Australia.png","status":"play off"}]}

1 个答案:

答案 0 :(得分:0)

在你的情况下,你有&#34;玩&#34;使用大写字母P,但等于默认情况下会考虑这种情况,这可能是您的问题吗?

编辑:好的,我想我明白了 您不是为每个项目定义onItemClickListener,而是为每个项目定义onItemClickListener,以便在列表填充结束时,您的侦听器基于列表中最后一项的状态 您应该只定义onItemClickListener一次,并且您将单击带有视图和位置参数的项目

例如,您可能希望将所有项目的列表存储为字段,并且在onItemClickListener中,您将从该位置获得单击项目,从而获得其状态

使用view参数,您应该能够访问字段&#39;值通过findViewById

编辑2: 我的意思如下:只有一个onItemClickListener需要定义,onItemClick方法将提供点击项目的位置和视图。 这意味着每次用户单击列表中的任何项目时,都会调用侦听器,但每个不同的行没有一个不同的侦听器。

考虑到这一点,在onItemClick中,通过视图和/或位置,您可以访问状态textview,获取其值,然后执行您需要处理吐司和意图的所有内容。我希望它比以前更清楚

编辑3: 这应该做你的事:在你的听众,你的转换之前, TextView currentStatus =(TextView)convertView.findViewById(R.id.status);

然后用currentStatus替换侦听器内状态的所有引用。而且你需要在getView方法之外只定义一次监听器,甚至在你的适配器之外,而不是定义listView并添加适配器的地方