【问题标题】:Android ListView OnItemClickListener not working properlyAndroid ListView OnItemClickListener 无法正常工作
【发布时间】:2019-09-08 23:14:34
【问题描述】:

我创建了一个简单的 ListView,它有一个子视图。但是,OnItemClickListener 不起作用。

伙计们,你能告诉我这里的问题吗?

lvList.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                ListData mLog = listAdapter.getItem(position);
                Toast.makeText(JobsActivity.this, "Title: " + mLog.getTitle() + "  Description: " + mLog.getDescription(), Toast.LENGTH_LONG).show();
            }
        });
public class JobsActivity extends Drawer {

    public static final int MULTIPLE_PERMISSIONS = 10;

    ListView lvList;
    ArrayList<ListData> myList = new ArrayList<ListData>();
    ListAdapter listAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.jobs);
        ButterKnife.bind(this);

        askForPermission();

        loadDrawer();
        lvList = (ListView) findViewById(R.id.list);
        listAdapter = new ListAdapter(JobsActivity.this, myList);

        for (int i = 0; i<=5; i++){
            ListData mLog = new ListData();
            mLog.setTitle("test "+i);
            mLog.setDescription("demo "+i);
            mLog.setImage("https://via.placeholder.com/150");
            myList.add(mLog);

        }

        listAdapter.notifyDataSetChanged();


        lvList.setAdapter(listAdapter);

        lvList.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                ListData mLog = listAdapter.getItem(position);
                Toast.makeText(JobsActivity.this, "Title: " + mLog.getTitle() + "  Description: " + mLog.getDescription(), Toast.LENGTH_LONG).show();
            }
        });


    }

父列表视图

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    android:focusable="true"
    android:clickable="true"
    android:focusableInTouchMode="false"
    tools:context=".JobsActivity"
    tools:openDrawer="start">

    <ProgressBar
        android:id="@+id/main_progress"
        style="?android:attr/progressBarStyle"
        android:layout_width="wrap_content"
        android:layout_centerInParent="true"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:elevation="2dp"
        android:visibility="gone" />


<LinearLayout
    android:layout_width="match_parent"
    android:padding="16dp"

    android:layout_height="match_parent"
    android:orientation="vertical"
    android:focusable="true"
    android:focusableInTouchMode="false"
    android:clickable="true"
    >

    <ListView
        android:id="@+id/list"

        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:clickable="true"
        android:divider="@android:color/transparent"
        android:focusable="true"
        android:focusableInTouchMode="false"
        android:descendantFocusability="blocksDescendants"

        />

</LinearLayout>

    <android.support.design.widget.NavigationView
        android:id="@+id/nav_view"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:fitsSystemWindows="true"
        app:headerLayout="@layout/nav_header_main"
        app:menu="@menu/activity_main_drawer" />

</android.support.v4.widget.DrawerLayout>

子项目

<android.support.v7.widget.CardView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    style="@style/CardView.Light"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="8dp"
    android:layout_marginStart="8dp"
    android:layout_marginEnd="8dp"
    android:focusable="false"
    android:focusableInTouchMode="false"
    tools:context=".JobsActivity"
    tools:ignore="ContentDescription">

    <android.support.constraint.ConstraintLayout
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <TextView
            android:id="@+id/customer_name"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginTop="24dp"
            android:layout_marginStart="16dp"
            android:layout_marginEnd="16dp"
            android:text="@string/customer_name"
            android:textAppearance="@style/TextAppearance.AppCompat.Headline"
            android:textColor="@color/colorPrimaryTextDefaultMaterialLight"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintEnd_toStartOf="@+id/customer_mobile_image" />

        <TextView
            android:id="@+id/mobile_model"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginStart="16dp"
            android:layout_marginEnd="16dp"
            android:text="@string/mobile_model"
            android:textAppearance="@style/TextAppearance.AppCompat.Body1"
            android:textColor="@color/colorSecondaryTextDefaultMaterialLight"
            app:layout_constraintTop_toBottomOf="@+id/customer_name"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintEnd_toStartOf="@+id/customer_mobile_image" />

        <ImageView
            android:id="@+id/customer_mobile_image"
            android:layout_width="120dp"
            android:layout_height="120dp"
            android:layout_marginEnd="16dp"
            android:layout_marginTop="16dp"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:srcCompat="@android:color/darker_gray" />

        <Button
            style="@style/Widget.AppCompat.Button.Borderless"
            android:id="@+id/action_button_1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="8dp"
            android:minWidth="0dp"
            android:paddingStart="8dp"
            android:paddingEnd="8dp"
            android:text="@string/show_location"
            android:textColor="@color/colorPrimaryTextDefaultMaterialLight"
            app:layout_constraintTop_toBottomOf="@+id/customer_mobile_image"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintBottom_toBottomOf="parent"
            android:focusable="false"
            android:focusableInTouchMode="false"

            />

        <Button
            style="@style/Widget.AppCompat.Button.Borderless"
            android:id="@+id/btnOpen_pickup"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="8dp"
            android:minWidth="0dp"
            android:paddingStart="8dp"
            android:paddingEnd="8dp"
            android:text="@string/open_job"
            android:textColor="@color/colorPrimaryTextDefaultMaterialLight"
            app:layout_constraintTop_toTopOf="@+id/action_button_1"
            app:layout_constraintStart_toEndOf="@+id/action_button_1" />

    </android.support.constraint.ConstraintLayout>

</android.support.v7.widget.CardView>

【问题讨论】:

  • 什么不起作用?更具体。
  • 在项目上,单击显示 Toast 和项目标题
  • android:focusableInTouchMode="true"
  • 不走运,我试过了
  • 在子项的根视图而不是列表视图中使用 android:descendantFocusability="blocksDescendants"。

标签: android android-listview onitemclicklistener


【解决方案1】:

我尝试过使用它工作的适配器...

@Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        ListViewHolder view = (ListViewHolder) convertView;
        if (view == null) {
            view = new ListViewHolder(context);
        }
        ListData log = getItem(position);
        view.setLog(log);

        view.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View arg0) {
                Log.d("test item",myList.get(position).getTitle());
            }
        });

        Button ShowMap = view.findViewById(R.id.btnShowMap);
        ShowMap.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.d("test item",myList.get(position).getImage().toString());
            }
        });

        return view;
    }

【讨论】:

    猜你喜欢
    • 2011-06-13
    • 1970-01-01
    • 2015-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多