首页 > 解决方案 > ListView onItemClick() 未执行

问题描述

我有一个 MainScreen,它将在 listView 中显示一些计时器。我的问题是,我无法打开单个计时器,并且永远不会执行 onClick 事件。我的 onClickEvent 中的代码有效,我已经测试过了。

这是我的主要活动:

public class MainActivity extends AppCompatActivity {
    ListView listView;
    List<Timer> al;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Timer timer1 = new Timer("06:30", true, true, true, true, true, false, false);
        Timer timer2 = new Timer("09:30", true, true, true, true, true, true, true);
        Timer timer3 = new Timer("04:30", false, false, true, true, true, false, false);
        Timer timer4 = new Timer("10:30", true, true, false, true, true, true, false);
        Timer timer5 = new Timer("06:30", true, true, true, true, true, false, false);
        Timer timer6 = new Timer("09:30", true, true, true, true, true, true, true);
        Timer timer7 = new Timer("04:30", false, false, true, true, true, false, false);
        Timer timer8 = new Timer("10:30", true, true, false, true, true, true, false);

        al = new ArrayList<>();
        al.add(timer1);
        al.add(timer2);
        al.add(timer3);
        al.add(timer4);
        al.add(timer5);
        al.add(timer6);
        al.add(timer7);
        al.add(timer8);

        listView = findViewById(R.id.list_view_timer);
        TimerAdapter adapter = new TimerAdapter(listView.getContext(), al);
        listView.setAdapter(adapter);

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Intent detailIntent = new Intent(MainActivity.this, EditTimerActivity.class);
                detailIntent.putExtra("timer", al.get(position));
                startActivity(detailIntent);
            }
        });
    }
}

我的计时器课:

public class Timer implements Serializable {
    public String time;
    public boolean wk_Mo;
    public boolean wk_Di;
    public boolean wk_Mi;
    public boolean wk_Do;
    public boolean wk_Fr;
    public boolean wk_Sa;
    public boolean wk_So;
    public boolean on = true;

    public Timer(String time, boolean wk_Mo, boolean wk_Di, boolean wk_Mi, boolean wk_Do, boolean wk_Fr, boolean wk_Sa, boolean wk_So) {
        this.time = time;
        this.wk_Mo = wk_Mo;
        this.wk_Di = wk_Di;
        this.wk_Mi = wk_Mi;
        this.wk_Do = wk_Do;
        this.wk_Fr = wk_Fr;
        this.wk_Sa = wk_Sa;
        this.wk_So = wk_So;
    }

    public String getTime() {
        return time;
    }

    public void setTime(String time) {
        this.time = time;
    }

    public boolean isWk_Mo() {
        return wk_Mo;
    }

    public void setWk_Mo(boolean wk_Mo) {
        this.wk_Mo = wk_Mo;
    }

    public boolean isWk_Di() {
        return wk_Di;
    }

    public void setWk_Di(boolean wk_Di) {
        this.wk_Di = wk_Di;
    }

    public boolean isWk_Mi() {
        return wk_Mi;
    }

    public void setWk_Mi(boolean wk_Mi) {
        this.wk_Mi = wk_Mi;
    }

    public boolean isWk_Do() {
        return wk_Do;
    }

    public void setWk_Do(boolean wk_Do) {
        this.wk_Do = wk_Do;
    }

    public boolean isWk_Fr() {
        return wk_Fr;
    }

    public void setWk_Fr(boolean wk_Fr) {
        this.wk_Fr = wk_Fr;
    }

    public boolean isWk_Sa() {
        return wk_Sa;
    }

    public void setWk_Sa(boolean wk_Sa) {
        this.wk_Sa = wk_Sa;
    }

    public boolean isWk_So() {
        return wk_So;
    }

    public void setWk_So(boolean wk_So) {
        this.wk_So = wk_So;
    }

    public boolean isOn() {
        return on;
    }

    public void setOn(boolean on) {
        this.on = on;
    }
}

我的自定义适配器:

class TimerAdapter extends ArrayAdapter {
    private Context activityContext;
    private List<Timer> list;
    public static final String TAG = "ListView";
    private int accent;
    private int white;

    public TimerAdapter(Context context, List<Timer> list){
        super(context, R.layout.timer_list, list);
        this.activityContext = context;
        this.list = list;
    }


    @Override
    public View getView(final int position, View view, ViewGroup viewGroup){

        final ViewHolder viewHolder;

        if (view == null) {
            view = LayoutInflater.from(activityContext).inflate(R.layout.timer_list, null);
            viewHolder = new ViewHolder();


            viewHolder.timer = view.findViewById(R.id.textViewTime);
            viewHolder.wk1 = view.findViewById(R.id.textWeekday1);
            viewHolder.wk2 = view.findViewById(R.id.textWeekday2);
            viewHolder.wk3 = view.findViewById(R.id.textWeekday3);
            viewHolder.wk4 = view.findViewById(R.id.textWeekday4);
            viewHolder.wk5 = view.findViewById(R.id.textWeekday5);
            viewHolder.wk6 = view.findViewById(R.id.textWeekday6);
            viewHolder.wk7 = view.findViewById(R.id.textWeekday7);
            viewHolder.switch1 = view.findViewById(R.id.switch1);


            viewHolder.timer.setText(list.get(position).getTime());
            if(list.get(position).isWk_Mo()){
                viewHolder.wk1.setTextColor(ContextCompat.getColor(activityContext, R.color.accent));
            }
            else{
                viewHolder.wk1.setTextColor(ContextCompat.getColor(activityContext, R.color.white));
            }
            if(list.get(position).isWk_Di()){
                viewHolder.wk2.setTextColor(ContextCompat.getColor(activityContext, R.color.accent));
            }
            else{
                viewHolder.wk2.setTextColor(ContextCompat.getColor(activityContext, R.color.white));
            }
            if(list.get(position).isWk_Mi()){
                viewHolder.wk3.setTextColor(ContextCompat.getColor(activityContext, R.color.accent));
            }
            else{
                viewHolder.wk3.setTextColor(ContextCompat.getColor(activityContext, R.color.white));
            }
            if(list.get(position).isWk_Do()){
                viewHolder.wk4.setTextColor(ContextCompat.getColor(activityContext, R.color.accent));
            }
            else{
                viewHolder.wk4.setTextColor(ContextCompat.getColor(activityContext, R.color.white));
            }
            if(list.get(position).isWk_Fr()){
                viewHolder.wk5.setTextColor(ContextCompat.getColor(activityContext, R.color.accent));
            }
            else{
                viewHolder.wk5.setTextColor(ContextCompat.getColor(activityContext, R.color.white));
            }
            if(list.get(position).isWk_Sa()){
                viewHolder.wk6.setTextColor(ContextCompat.getColor(activityContext, R.color.accent));
            }
            else{
                viewHolder.wk6.setTextColor(ContextCompat.getColor(activityContext, R.color.white));
            }
            if(list.get(position).isWk_So()){
                viewHolder.wk7.setTextColor(ContextCompat.getColor(activityContext, R.color.accent));
            }
            else{
                viewHolder.wk7.setTextColor(ContextCompat.getColor(activityContext, R.color.white));
            }
            if(list.get(position).isOn()){
                viewHolder.switch1.setChecked(true);
            }
            else{
                viewHolder.switch1.setChecked(false);
            }

            view.setTag(viewHolder);
        } else {
            viewHolder = (ViewHolder) view.getTag();
        }

        return view;
    }

    private static class ViewHolder {
        TextView timer;
        TextView wk1;
        TextView wk2;
        TextView wk3;
        TextView wk4;
        TextView wk5;
        TextView wk6;
        TextView wk7;
        Switch switch1;
    }
}

我的计时器列表

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/tempID"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="100dp"
    android:background="@drawable/filled_bordered_ellipse"
    >


    <TextView
        android:id="@+id/textViewTime"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="16dp"
        android:layout_marginLeft="16dp"
        android:text="06:30"
        android:textSize="40dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Switch
        android:id="@+id/switch1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginEnd="24dp"
        android:layout_marginRight="24dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/textWeekday1"
        android:layout_width="@dimen/weekdays_width"
        android:layout_height="@dimen/weekdays_height"
        android:gravity="center"
        android:text="@string/Monday"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toStartOf="@+id/textWeekday2"
        app:layout_constraintTop_toTopOf="parent"
        android:textSize="@dimen/weekdays_textsize"/>

    <TextView
        android:id="@+id/textWeekday2"
        android:layout_width="@dimen/weekdays_width"
        android:layout_height="@dimen/weekdays_height"
        android:gravity="center"
        android:text="@string/Tuesday"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toStartOf="@+id/textWeekday3"
        app:layout_constraintTop_toTopOf="parent"
        android:textSize="@dimen/weekdays_textsize"/>

    <TextView
        android:id="@+id/textWeekday3"
        android:layout_width="@dimen/weekdays_width"
        android:layout_height="@dimen/weekdays_height"
        android:gravity="center"
        android:text="@string/Wednesday"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toStartOf="@+id/textWeekday4"
        app:layout_constraintTop_toTopOf="parent"
        android:textSize="@dimen/weekdays_textsize"/>

    <TextView
        android:id="@+id/textWeekday4"
        android:layout_width="@dimen/weekdays_width"
        android:layout_height="@dimen/weekdays_height"
        android:gravity="center"
        android:text="@string/Thursday"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toStartOf="@+id/textWeekday5"
        app:layout_constraintTop_toTopOf="parent"
        android:textSize="@dimen/weekdays_textsize"/>

    <TextView
        android:id="@+id/textWeekday5"
        android:layout_width="@dimen/weekdays_width"
        android:layout_height="@dimen/weekdays_height"
        android:gravity="center"
        android:text="@string/Friday"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toStartOf="@+id/textWeekday6"
        app:layout_constraintTop_toTopOf="parent"
        android:textSize="@dimen/weekdays_textsize"/>

    <TextView
        android:id="@+id/textWeekday6"
        android:layout_width="@dimen/weekdays_width"
        android:layout_height="@dimen/weekdays_height"
        android:gravity="center"
        android:text="@string/Saturday"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toStartOf="@+id/textWeekday7"
        app:layout_constraintTop_toTopOf="parent"
        android:textSize="@dimen/weekdays_textsize"/>

    <TextView
        android:id="@+id/textWeekday7"
        android:layout_width="@dimen/weekdays_width"
        android:layout_height="@dimen/weekdays_height"
        android:layout_marginEnd="16dp"
        android:layout_marginRight="16dp"
        android:gravity="center"
        android:text="@string/Sunday"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toStartOf="@+id/switch1"
        app:layout_constraintTop_toTopOf="parent"
        android:textSize="@dimen/weekdays_textsize"/>

</androidx.constraintlayout.widget.ConstraintLayout>

我的 EditTimerActivity 是这样开始的:

public class EditTimerActivity extends AppCompatActivity {

    Button[] button = new Button[7];
    Boolean[] wk = new Boolean[7];

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_edit_timer);


        Intent intent = EditTimerActivity.this.getIntent();
        Timer timer = (Timer)intent.getSerializableExtra("timer");

标签: androidlistviewonclick

解决方案


尝试将您的 listView.setOnItemClickListener 放在您的 listView.setAdapter 之前,不确定,但我只是看看我所有的项目,每次我把它放在前面并且它工作。


推荐阅读