簡體   English   中英

偵聽器將無法正常工作

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM