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
和一个 RatingBar
。 onItemClickListener
一直在监听列表项点击,直到 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"
我在片段的重写 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
和一个 RatingBar
。 onItemClickListener
一直在监听列表项点击,直到 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"