android-CustomArrayAdapter-listitems上的单击无法识别

bqucvtff  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(316)

我实现了一个自定义 ArrayAdapter 这就导致了这样一个问题:用户无法识别对listitem的textview元素的任何单击 ListView ; 但是点击 ImageView listitem的元素会产生所需的效果。我只是不知道这种行为是怎么造成的,即使我很难按照教程。
当我使用标准的时候一切都很好 ArrayAdapater .
我将包括相关的类,因为我不知道它们中的哪一个与解决这个问题相关。
客户阵列适配器:

  1. public class ClassCustomArrayAdapter extends ArrayAdapter {
  2. private ArrayList<ArrayList<String>> contactsArray;
  3. private Context context;
  4. public ClassCustomArrayAdapter(Context context, int textViewResourceId, ArrayList<ArrayList<String>> contactsArray) {
  5. super(context, textViewResourceId, contactsArray);
  6. this.contactsArray = contactsArray;
  7. this.context = context;
  8. }
  9. private class ViewHolder{
  10. ImageView imageView;
  11. TextView textView;
  12. }
  13. @Override
  14. public View getView(final int position, View convertView, ViewGroup parent) {
  15. ViewHolder viewHolder = null;
  16. LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
  17. if(convertView == null) {
  18. convertView = layoutInflater.inflate(R.layout.fragment_custom_listview_item, null);
  19. viewHolder = new ViewHolder();
  20. viewHolder.textView = (TextView) convertView.findViewById(R.id.tv);
  21. viewHolder.imageView = (ImageView) convertView.findViewById(R.id.iv);
  22. convertView.setTag(viewHolder);
  23. } else {
  24. viewHolder = (ViewHolder) convertView.getTag();
  25. }
  26. viewHolder.textView.setText(String.format("%s %s", contactsArray.get(position).get(2), contactsArray.get(position).get(1)));
  27. viewHolder.imageView.setImageResource(R.drawable.ic_baseline_person_24);
  28. return convertView;
  29. }
  30. }

碎片列表联系人:

  1. public class FragmentListContacts extends Fragment {
  2. private ArrayList<ArrayList<String>> contacts_arraylist;
  3. private ArrayList<ArrayList<String>> contacts_array_listview;
  4. private ArrayAdapter<String> contact_ids;
  5. private ArrayAdapter<ArrayList<String>> contacts_arrayadapter;
  6. private ListView contacts_listview;
  7. private FloatingActionButton add_contact_fab;
  8. private Database db;
  9. @Override
  10. public void onCreate(Bundle savedInstanceState) {
  11. super.onCreate(savedInstanceState);
  12. }
  13. @Override
  14. public View onCreateView(LayoutInflater inflater, ViewGroup container,
  15. Bundle savedInstanceState) {
  16. // Inflate the layout for this fragment
  17. return inflater.inflate(R.layout.fragment_list_contacts, container, false);
  18. }
  19. @Override
  20. public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
  21. super.onViewCreated(view, savedInstanceState);
  22. contacts_listview = getActivity().findViewById(R.id.contacts_listview);
  23. add_contact_fab = getActivity().findViewById(R.id.add_contact_fab);
  24. initAddContactFAB();
  25. db = new Database(getContext());
  26. //db.insertNewContact("A", "B", "123", "321");
  27. //db.insertNewContact("C", "D", "456", "654");
  28. contacts_arraylist = new ArrayList<>();
  29. contacts_arraylist.addAll(db.getContacts());
  30. //contacts_arrayadapter = new ArrayAdapter<ArrayList<String>>(getContext(), android.R.layout.simple_list_item_1, android.R.id.text1, contacts_arraylist);
  31. ClassCustomArrayAdapter classCustomArrayAdapter = new ClassCustomArrayAdapter(getContext(), R.layout.fragment_custom_listview_item, contacts_arraylist);
  32. //contacts_listview.setAdapter(contacts_arrayadapter);
  33. contacts_listview.setAdapter(classCustomArrayAdapter);
  34. contacts_listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
  35. @Override
  36. public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
  37. Intent intent = new Intent(getContext(), ActivityListNotesByContact.class);
  38. startActivity(intent);
  39. }
  40. });
  41. registerForContextMenu(contacts_listview);
  42. }
  43. ...
  44. }

自定义\u列表视图\u项:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout
  3. xmlns:android="http://schemas.android.com/apk/res/android"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent"
  6. android:orientation="horizontal"
  7. >
  8. <ImageView
  9. android:id="@+id/iv"
  10. android:layout_width="wrap_content"
  11. android:layout_height="fill_parent"
  12. android:gravity="center_vertical"
  13. android:layout_alignParentTop="true"
  14. android:layout_alignParentBottom="true"
  15. android:layout_marginRight="15dp"
  16. android:layout_marginTop="5dp"
  17. android:layout_marginBottom="5dp"
  18. android:longClickable="true"
  19. android:clickable="true"/>
  20. <TextView
  21. android:layout_width="match_parent"
  22. android:layout_height="50dp"
  23. android:id="@+id/tv"
  24. android:gravity="center_vertical"
  25. android:padding="5px"
  26. android:layout_marginLeft="5dp"
  27. android:layout_alignParentTop="true"
  28. android:layout_alignParentBottom="true"
  29. android:textSize="60px"
  30. android:textColor="#000000"
  31. android:background="#FFFFFF"
  32. android:longClickable="true"
  33. android:clickable="true"/>
  34. </LinearLayout>

提前谢谢!

ou6hu8tu

ou6hu8tu1#

这个
ListView setOnItemClickListener 拦截对列表项的根视图的单击,并在启用 TextView 作为clickable,它有自己的click侦听器,不会被
ListView setOnItemClickListener .
解决方案:
你需要两者兼得 TextView 以及 ImageView 不可点击或不可聚焦

  1. android:clickable="false"
  2. android:focusable="false"

您可以使用下面的列表项布局。。

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="wrap_content"
  5. android:orientation="horizontal">
  6. <ImageView
  7. android:id="@+id/iv"
  8. android:layout_width="wrap_content"
  9. android:layout_height="wrap_content"
  10. android:layout_marginTop="5dp"
  11. android:layout_marginRight="15dp"
  12. android:layout_marginBottom="5dp"
  13. android:gravity="center_vertical"
  14. android:clickable="false"
  15. android:focusable="false"/>
  16. <TextView
  17. android:id="@+id/tv"
  18. android:layout_width="match_parent"
  19. android:layout_height="50dp"
  20. android:clickable="false"
  21. android:focusable="false"
  22. android:layout_marginLeft="5dp"
  23. android:background="#FFFFFF"
  24. android:gravity="center_vertical"
  25. android:textColor="#000000" />
  26. </LinearLayout>
展开查看全部

相关问题