[英]Listener won't work
我正在嘗試為放置在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,它給了我“ Child Count:5”,但是“單擊” Toast從未顯示。 我確保我的自定義視圖是可單擊的(linearlist的子代)。 但是由於某種原因,監聽器將無法工作。 有人知道為什么嗎?
編輯:嘗試調試代碼后,出現此錯誤:
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
如果我在未調試的情況下啟動應用程序,則不會顯示此錯誤,只會在使用斷點進行調試時顯示。 這個錯誤應該意味着我正在嘗試使用一個不再存在的上下文,但是我不是,這里的問題是什么?
您的祝酒訊息似乎出現錯誤。
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消息測試事件的發生並沒有錯,但我建議您簡化為僅使用日志消息。 日志消息不是上下文敏感的,除非您提供空消息,否則它不太可能失敗。
如果日志消息不起作用,則下一步故障排除步驟應該是檢查自定義視圖和視圖層次結構。 如果自定義視圖前面有任何可單擊的透明視圖,它們將攔截單擊事件。 再次檢查視圖本身是否也是可單擊的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.