我有一个MainScreen,它会在listView中显示一些计时器。我的问题是,我不能打开一个单独的计时器,并且onClick事件永远不会执行。我的onClickEvent中的代码可以工作,我已经测试过了。
这是我的MainActivity:
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);
}
});
}
}我的Timer类:
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");发布于 2019-11-19 23:20:10
试着把你的listView.setOnItemClickListener放在你的listView.setAdapter之前,不确定,但我只是看了一下我所有的项目,每次我把它放在前面,它都有效。
https://stackoverflow.com/questions/58935255
复制相似问题