我正在尝试为我放入LinearLayout的自定义视图设置一个监听器。这些视图是由代码根据特定文件或数据创建的,因此我不知道有多少视图。正在设置OnClickListener,但永远不会调用onClick():
@Override
protected void onResume() {
super.onResume();
try {
setupBackEnd();
} catch (IOException e) {
Toast.makeText(this, "Error Reading or Writing data in Storage, Try to restart the App", Toast.LENGTH_LONG).show();
e.printStackTrace();
}
Toast.makeText(DayActivity.this, "Child count: " + linearList.getChildCount(), Toast.LENGTH_SHORT).show();
for (int i = 0; i < linearList.getChildCount(); i++) {
linearList.getChildAt(i).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(DayActivity.this, "clicked", Toast.LENGTH_SHORT).show();
}
});
}
}
这是我的代码。为了确保儿童观点已经存在,我展示了一个Toast,它给了我&#34;儿童数:5&#34;但是&#34;点击&#34;吐司永远不会出现。我确保我的自定义视图是可点击的(线性列表的孩子)。但听众因某种原因无法工作。谁知道为什么?
编辑:我尝试调试代码后出现此错误:
10-27 18:52:26.309 17630-17630/osm_cave.timecave E/AndroidRuntime: FATAL EXCEPTION: main
Process: osm_cave.timecave, PID: 17630
android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.BinderProxy@672721e is not valid; is your activity running?
at android.view.ViewRootImpl.setView(ViewRootImpl.java:679)
at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:342)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:93)
at android.widget.Toast$TN.handleShow(Toast.java:459)
at android.widget.Toast$TN$2.handleMessage(Toast.java:342)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
c
当我在没有调试的情况下启动应用程序时,将显示此错误仅在使用断点进行调试时才会显示。这个错误应该意味着我试图使用不再存在的上下文,但我不是这样的问题在哪里?
答案 0 :(得分:2)
看起来您的Toast消息遇到了错误。
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:93)
at android.widget.Toast$TN.handleShow(Toast.java:459)
at android.widget.Toast$TN$2.handleMessage(Toast.java:342)
at android.os.Handler.dispatchMessage(Handler.java:102)
如果我没记错的话,您创建的View.OnClickListener类型的新对象(因为它是匿名的)无法访问DayActivity.this属性。相反,你应该从视图中获取活动。
public void onClick(View view) {
Activity activity = (Activity) view.getContext()
Toast.makeText(activity, "clicked", Toast.LENGTH_SHORT).show();
}
虽然使用Toast消息测试发生的事件没有任何问题,但我建议简化为仅使用日志消息。除非您向其提供空消息,否则对于上下文敏感的日志消息不太可能失败。
如果日志消息不起作用,则下一个故障排除步骤应该是检查自定义视图和视图层次结构。如果任何可单击的透明视图位于自定义视图的前面,它们将拦截单击事件。仔细检查视图本身是否也是可点击的。