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

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

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

public class ClassCustomArrayAdapter extends ArrayAdapter {

    private ArrayList<ArrayList<String>> contactsArray;
    private Context context;

    public ClassCustomArrayAdapter(Context context, int textViewResourceId, ArrayList<ArrayList<String>> contactsArray) {

        super(context, textViewResourceId, contactsArray);

        this.contactsArray = contactsArray;
        this.context = context;
    }

    private class ViewHolder{
        ImageView imageView;
        TextView textView;
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {

        ViewHolder viewHolder = null;

        LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);

        if(convertView == null) {
            convertView = layoutInflater.inflate(R.layout.fragment_custom_listview_item, null);
            viewHolder = new ViewHolder();
            viewHolder.textView = (TextView) convertView.findViewById(R.id.tv);
            viewHolder.imageView = (ImageView) convertView.findViewById(R.id.iv);
            convertView.setTag(viewHolder);
        } else {
            viewHolder = (ViewHolder) convertView.getTag();
        }

        viewHolder.textView.setText(String.format("%s %s", contactsArray.get(position).get(2), contactsArray.get(position).get(1)));
        viewHolder.imageView.setImageResource(R.drawable.ic_baseline_person_24);

        return convertView;
    }

}

碎片列表联系人:

public class FragmentListContacts extends Fragment {

    private ArrayList<ArrayList<String>> contacts_arraylist;
    private ArrayList<ArrayList<String>> contacts_array_listview;
    private ArrayAdapter<String> contact_ids;
    private ArrayAdapter<ArrayList<String>> contacts_arrayadapter;
    private ListView contacts_listview;
    private FloatingActionButton add_contact_fab;
    private Database db;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_list_contacts, container, false);
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        contacts_listview = getActivity().findViewById(R.id.contacts_listview);
        add_contact_fab = getActivity().findViewById(R.id.add_contact_fab);
        initAddContactFAB();
        db = new Database(getContext());
        //db.insertNewContact("A", "B", "123", "321");
        //db.insertNewContact("C", "D", "456", "654");
        contacts_arraylist = new ArrayList<>();
        contacts_arraylist.addAll(db.getContacts());

        //contacts_arrayadapter = new ArrayAdapter<ArrayList<String>>(getContext(), android.R.layout.simple_list_item_1, android.R.id.text1, contacts_arraylist);

        ClassCustomArrayAdapter classCustomArrayAdapter = new ClassCustomArrayAdapter(getContext(), R.layout.fragment_custom_listview_item, contacts_arraylist);
        //contacts_listview.setAdapter(contacts_arrayadapter);
        contacts_listview.setAdapter(classCustomArrayAdapter);

        contacts_listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Intent intent = new Intent(getContext(), ActivityListNotesByContact.class);
                startActivity(intent);
            }
        });

        registerForContextMenu(contacts_listview);
    }

    ...
}

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

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    >

    <ImageView
        android:id="@+id/iv"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:gravity="center_vertical"
        android:layout_alignParentTop="true"
        android:layout_alignParentBottom="true"
        android:layout_marginRight="15dp"
        android:layout_marginTop="5dp"
        android:layout_marginBottom="5dp"
        android:longClickable="true"
        android:clickable="true"/>

    <TextView
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:id="@+id/tv"
        android:gravity="center_vertical"
        android:padding="5px"
        android:layout_marginLeft="5dp"
        android:layout_alignParentTop="true"
        android:layout_alignParentBottom="true"
        android:textSize="60px"
        android:textColor="#000000"
        android:background="#FFFFFF"
        android:longClickable="true"
        android:clickable="true"/>

</LinearLayout>

提前谢谢!

ou6hu8tu

ou6hu8tu1#

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

android:clickable="false"
android:focusable="false"

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

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">

    <ImageView
        android:id="@+id/iv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="5dp"
        android:layout_marginRight="15dp"
        android:layout_marginBottom="5dp"
        android:gravity="center_vertical"
        android:clickable="false"
        android:focusable="false"/>

    <TextView
        android:id="@+id/tv"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:clickable="false"
        android:focusable="false"
        android:layout_marginLeft="5dp"
        android:background="#FFFFFF"
        android:gravity="center_vertical"
        android:textColor="#000000" />

</LinearLayout>

相关问题