2017-06-17 49 views
0

所以我有一個片段下面的ImageButton:的ImageButton OnClickListener不工作

<ImageButton 
      android:id="@+id/moneyBtn" 
      style="@android:style/Widget.Holo.Light.ImageButton" 
      android:layout_width="250dp" 
      android:layout_height="250dp" 
      android:layout_centerHorizontal="true" 
      android:layout_marginTop="40dp" 
      android:scaleType="fitCenter" 
      android:adjustViewBounds="true" 
      android:src="@drawable/monkey" 
      android:background="@null"/> 

而下面fragmentActivity.kt

class Home : Fragment() { 

    override public fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { 
     val view: View? = inflater.inflate(R.layout.fragment_home, container, false) 
     val moneyButton: ImageButton = view?.findViewById(R.id.moneyBtn) as ImageButton 


     val result = MyAppApplication() 
     var money = result.money 

     moneyButton.setOnClickListener(View.OnClickListener { 
      Toast.makeText(activity, "TESTING BUTTON CLICK 1", Toast.LENGTH_SHORT).show() 
     }) 


     return view 
    } 

我還試圖用 「正常」 Kotline setOnClickListener

moneyButton.setOnClickListener { 
      Toast.makeText(activity, "TESTING BUTTON CLICK 1", Toast.LENGTH_SHORT).show() 
     } 

應用劑量崩潰和劑量凍結,它只是不工作

我也嘗試用拋出替換吐司,但是這也不會被優先考慮。 也許你可以找到我的錯誤?

+0

你介意張貼了它開創了片段Activity類? – DaveNOTDavid

+0

我沒有任何理由認爲該方法運行在其他線程的UI,但我找不到任何理由。嘗試使用'runOnUiThread'運行你的吐司在線程 –

回答

0

因此,我剛剛用ImageView替換了ImageButton,我不知道爲什麼,但它現在有效。 這裏的XML,如果你遇到了同樣的問題:

<ImageView 
      android:id="@+id/moneyPlusBtn" 
      android:layout_width="240dp" 
      android:layout_height="240dp" 
      android:layout_below="@+id/homeText" 
      android:layout_centerHorizontal="true" 
      android:src="@drawable/monkey" /> 

這裏是科特林代碼:

val moneyPlusBtn: ImageView = view.findViewById(R.id.moneyPlusBtn) as ImageView 
moneyPlusBtn.setOnClickListener { 
      Toast.makeText(activity, "Money", Toast.LENGTH_SHORT).show() 
     } 
0

首先,你甚至知道這段代碼被執行了嗎?聆聽者已設置?也許嘗試使用日誌類(在Kotlin中應該與Java中相同)。
另外,

val result = MyAppApplication() 
var money = result.money 

看起來對我很可疑。你想創建一個新的應用程序實例嗎?

+0

是的,其他一切正常,日誌證實:/我正在使用應用程序Inst來存儲「全局」變量,這也很好。刪除此代碼不會改變任何內容 – Max

+0

您是否嘗試過view.setOnClickListener,如果有效? – Zhyano

0

嘗試在onActivityCreated中初始化您的點擊監聽器。它在onCreateView之後被調用,所以它會確保view被誇大。

override fun onActivityCreated(savedInstanceState: Bundle?) { 
    super.onActivityCreated(savedInstanceState) 

    val moneyButton: ImageButton = activity.findViewById(R.id.moneyBtn) as ImageButton 
    moneyButton.setOnClickListener { 
     Toast.makeText(activity, "TESTING BUTTON CLICK 1", Toast.LENGTH_SHORT).show() 
    } 
} 
+0

它在一個片段中:/ – Max

+0

@Foose通過調用'Fragment'中的'activity.findViewById(resId)'可以獲得視圖元素。 – shiftpsh

+0

不工作:c。沒有語法錯誤,沒有例外 – Max

0

奇怪,我只是想盡自己的平臺上的代碼片段,以及吐司彈出就好了...試着改變吐司的第一個參數來view.context代替它會是這個樣子:

Toast.makeText(view.context, "TESTING BUTTON CLICK 1", Toast.LENGTH_SHORT).show() 

讓我知道這是否有所作爲。