2017-06-17 17 views
0

を働いていないので、私持っているフラグメントで次のImageButton:私も "ノーマル" Kotline setOnClickListenerのImageButton OnClickListener

を使用しようとした

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 
    } 

<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

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

アプリの用量のクラッシュとドセントフリーズ、それだけで仕事をしない

私はトーストをスローで置き換えようとしましたが、それも免除されません。 あなたは私の間違いを見つけることができますか?

+0

気にしますか? – DaveNOTDavid

+0

私はそのメソッドが他のスレッドでUIを実行すると思う理由はありませんが、何らかの理由で見つけることができません。 'runOnUiThread'を使用してUIスレッドでトーストを実行しようとしてください –

答えて

0

ImageButtonImageViewに置き換えた理由はわかりませんが、現在は動作しています。あなたが同じ問題に実行する場合 は、ここに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" /> 

、ここではKotlinコードは次のとおりです。あなたは、フラグメントを開きActivityクラスを投稿

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

まず、このコードが実行されていることは知っていますか?リスナーは設定されているのですか?おそらく、ログクラスを使用しようとします(Javaと同じKotlinでなければなりません)。
また、

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

が疑わしいと思われます。新しいApplicationインスタンスを作成しようとしていますか?

+0

はい、他のすべてがうまくいきます。ログは次のことを確認します:/アプリケーション・インスティテュートを使ってグローバル変数を保存しています。このコードを削除しても何も変わりません – 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

@Fose 'Fragment'で' activity.findViewById(resId) 'を呼び出すことによって、ビュー要素を取得することができます。 – shiftpsh

+0

動作していません:c。構文エラーなし、例外なし – Max

0

奇妙な、私はちょうど私のプラットフォーム上で、あなたのコードスニペットを試みたが、トーストがうまくポップアップ表示...それはのようになりたいので、代わりにview.contextするトーストの最初の引数を変更してみてください:

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

違いがあるかどうかを教えてください。