【问题标题】:onItemClickListener of ListView not working with RatingBarListView 的 onItemClickListener 不能与 RatingBar 一起使用
【发布时间】:2016-03-04 10:49:39
【问题描述】:

我在片段的重写 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 个TextViews、一个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 期望首先创建所有视图。但正如我们所见,所有视图都已成功创建。我该如何解决我的问题?请随时询问更多具体信息。

【问题讨论】:

  • 尝试在您的 ratingbar 属性中添加 focuable="false"
  • 试过了,没有运气:(

标签: android listview android-fragments onitemclicklistener ratingbar


【解决方案1】:

你可以试试

android:descendantFocusability="blocksDescendants"

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

【讨论】:

    【解决方案2】:

    在您的活动/片段中编写以下代码

     listview.setItemsCanFocus(true);
    

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

    android:descendantFocusability="blocksDescendants"
    

    【讨论】:

    • 也感谢您的回答。当我有 15 个代表点时,我会支持你的答案:)
    【解决方案3】:

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

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

    在您的 xml 中的 RatingBar 节点中进行设置:

    android:isIndicator="true"
    

    【讨论】:

      猜你喜欢
      • 2012-04-11
      • 1970-01-01
      • 1970-01-01
      • 2016-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多