ListView 的 onItemClickListener 不适用于 RatingBar

onItemClickListener of ListView not working with RatingBar

我在片段的重写 onViewCreated 方法中有一个列表项点击侦听器 (onItemClickListener)。方法体如下:

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    final String uname = getActivity().getIntent().getExtras().getString("uname");

    list = (ListView) getActivity().findViewById(R.id.drlistforhome);
    list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Doctors doc = rh.drList.get(position);
            imgURL = doc.getDrProPic();
            docName = doc.getDrName();
            jobTitle = doc.getDrJobTitle();
            docSpeciality = doc.getDrSpeciality();
            docUname = doc.getDrUname();
            startActivity(new Intent(getActivity().getApplicationContext(), DoctorsProfileH.class).putExtra("img", imgURL)
                    .putExtra("name", docName)
                    .putExtra("title", jobTitle)
                    .putExtra("speciality", docSpeciality)
                    .putExtra("uname", uname)
                    .putExtra("druname", docUname));
        }
    });

}

自定义列表视图布局由六个视图组成:4 个 TextView、一个 ImageView 和一个 RatingBaronItemClickListener 一直在监听列表项点击,直到 RatingBar 未被添加。但是现在我在我的自定义布局中添加了一个 RatingBar ,监听器将不再监听点击。我正在使用自定义适配器来设置所有视图。这是我的自定义适配器:

class TDsAdapter extends ArrayAdapter<Doctors> {
        public TDsAdapter(){
            super(getActivity().getApplicationContext(),R.layout.custom_list_view,rh.drList);
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View itemView = convertView;
            if (itemView == null) {
                itemView = inflater.inflate(R.layout.custom_list_view, parent, false);
            }
            Doctors currentItem = rh.drList.get(position);
            TextView drName = (TextView) itemView.findViewById(R.id.drName);
            drName.setText(currentItem.getDrName());

            TextView drSpeciality = (TextView) itemView.findViewById(R.id.drSpeciality);
            drSpeciality.setText(currentItem.getDrSpeciality());

            TextView drJobTitle = (TextView) itemView.findViewById(R.id.drJobTitle);
            drJobTitle.setText(currentItem.getDrJobTitle());

            ImageView drProPic = (ImageView) itemView.findViewById(R.id.drPropic);
            Picasso.with(getContext()).load(currentItem.getDrProPic()).into(drProPic);

            TextView distence = (TextView) itemView.findViewById(R.id.dis);
            distence.setText(currentItem.getDis());

            RatingBar rb = (RatingBar) itemView.findViewById(R.id.ratingBar);
            rb.setRating((float) 2.5);

            return itemView;
        }
    }

在 运行 应用程序之后,列表视图显示正常 RatingBar,如预期的那样,但列表项不再可单击。当我在侦听器中使用断点调试应用程序时,该断点永远不会执行。据我所知,我对片段知之甚少,这可能是因为 onViewCreated 期望首先创建所有视图。但是正如我们所见,所有的视图都已成功创建。我该如何解决我的问题?请随时询问更多具体信息。

在您的 activity/fragment

中写入以下代码
 listview.setItemsCanFocus(true);

另外请在您的适配器行布局根目录中添加,

android:descendantFocusability="blocksDescendants"

你可以试试

android:descendantFocusability="blocksDescendants"

在自定义行项目的根布局中。

如果列表的任何行项目包含可聚焦或可点击的视图,ListView 的 onClick 将不起作用。

如果您将 RatingBar 的 android:isIndicator 设置为 false,则 RatingBar 是可聚焦/可点击的。

在 xml 中的 RatingBar 节点中设置此项:

android:isIndicator="true"