2017-06-17 1 views
0

Also ich habe folgendes Image in einem Fragment:Image OnClickListener funktioniert nicht

<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"/> 

und die folgenden 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 
    } 

Ich habe auch versucht, die "normale" Kotline setOnClickListener

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

Die App Dosent Crash und Dosent Einfrieren, es funktioniert einfach nicht

Ich habe auch versucht, den Toast mit einem Wurf zu ersetzen, aber das wird auch nicht übertroffen. Vielleicht können Sie meinen Fehler finden?

+0

Haben Sie etwas dagegen die Aktivitätsklasse Posting auf, die das Fragment eröffnet? – DaveNOTDavid

+0

Ich habe keinen Grund zu denken, dass die Methode in anderen Thread diese UI ausführen, aber ich kann keinen Grund finden. Versuchen Sie, Ihren Toast im UI-Thread mit 'runOnUiThread' zu starten. –

Antwort

0

Also ich ersetzte gerade die ImageButton durch eine ImageView und ich weiß nicht warum, aber es funktioniert jetzt. Hier ist der XML, wenn Sie in der gleichen Ausgabe führen:

<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" /> 

und hier ist der Kotlin Code:

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

Erstens, wissen Sie überhaupt, dass dieser Code ausgeführt wird? Dass der Hörer eingestellt ist? Vielleicht versuchen Sie, die Log-Klasse (sollte in Kotlin wie in Java das gleiche sein) zu verwenden.
Auch

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

sieht mir verdächtig. Versuchen Sie, eine neue Anwendungsinstanz zu erstellen?

+0

ja, alles andere funktioniert gut, das Protokoll bestätigt, dass:/Ich verwende die Application Inst zum Speichern" globaler "Variablen, das funktioniert auch. Das Löschen dieses Codes ändert nichts – Max

+0

Haben Sie versucht, view.setOnClickListener, wenn das funktioniert? – Zhyano

0

Versuchen Sie, Ihren Klick-Listener in onActivityCreated zu initialisieren. Es heißt nach onCreateView, so wird es sicherstellen, dass view aufgeblasen ist.

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

Es ist in einem Fragment:/ – Max

+0

@Foose Es ist möglich, Ansichtselemente durch Aufruf von 'activity.findViewById (resId)' in Ihrem 'Fragment' zu erhalten. – shiftpsh

+0

Funktioniert nicht: c. keine Syntaxfehler, keine Ausnahmen – Max

0

Seltsam, ich habe gerade versucht, den Code-Schnipsel auf meiner Plattform und der Toast knallt ganz gut bis ... Versuchen Sie, die ersten arg von Toast zu ändern, anstatt view.context so es wie etwas aussehen würde:

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

Lassen Sie mich wissen, ob das einen Unterschied macht.

Verwandte Themen