android - 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");
解决方案
尝试将您的 listView.setOnItemClickListener 放在您的 listView.setAdapter 之前,不确定,但我只是看看我所有的项目,每次我把它放在前面并且它工作。