Estou tentando invocar o método no meu onClick (View v) XML, mas não funciona com Fragment. Esse é o erro.
01-17 12:38:36.840: E/AndroidRuntime(4171): java.lang.IllegalStateException:
Could not find a method insertIntoDb(View) in the activity class main.MainActivity
for onClick handler on view class android.widget.Button with id 'btn_conferma'
Código Java:
public void insertIntoDb(View v) {
...
}
XML:
<Button
android:id="@id/btn_conferma"
style="?android:attr/borderlessButtonStyle"
android:layout_width="0.0dip"
android:layout_height="45dp"
android:layout_marginLeft="2dp"
android:layout_weight="1.0"
android:background="@drawable/bottoni"
android:gravity="center_horizontal|center_vertical"
android:onClick="insertIntoDb"
android:text="SALVA"
android:textColor="#ffffff"
android:textSize="16sp" />
Respostas:
Sua atividade deve ter
não fragmento.
Se você não quer o acima em atividade. inicializar o botão no fragmento e definir o ouvinte para o mesmo.
Então
fonte
Outra opção pode ser fazer com que seu fragmento implemente View.OnClickListener e substitua onClick (View v) em seu fragmento. Se você precisar que seu fragmento converse com a atividade, basta adicionar uma interface com os métodos desejados e fazer com que a atividade implemente a interface e substitua seu (s) método (s).
http://developer.android.com/training/basics/firstapp/starting-activity.html http://developer.android.com/training/basics/fragments/communicating.html
fonte
Isso não é um problema, este é um design do Android. Veja aqui :
Uma possível solução alternativa seria fazer algo assim em sua MainActivity:
e então em sua classe Fragment:
fonte
Os outros já disseram que os métodos em onClick são pesquisados em atividades, não em fragmentos. No entanto, se você realmente quiser, é possível.
Basicamente, cada visualização possui uma tag (provavelmente nula). Definimos a marca da visão raiz para o fragmento que inflou essa visão. Então, é fácil pesquisar os pais da vista e recuperar o fragmento que contém o botão clicado. Agora, descobrimos o nome do método e usamos reflexão para chamar o mesmo método do fragmento recuperado. Fácil!
em uma classe que estende
Fragment
:todas as atividades são derivadas do mesmo ButtonHandlingActivity:
ButtonHandlingActivity.java:
Ele tem que definir métodos para todos os manipuladores xml onClick.
com / example / customandroid / OnClickFragments.java:
E a próxima aventura será a ofuscação progressiva ...
PS
Obviamente, depende de você projetar seu aplicativo de forma que os dados fiquem no modelo em vez de em atividades ou fragmentos (que são controladores do ponto de vista MVC , modelo-visão-controlador ). A visão é o que você define via xml, mais as classes de visão customizadas (se você as definir, a maioria das pessoas apenas reutiliza o que já existe). Uma regra prática: se alguns dados definitivamente devem sobreviver à virada da tela, eles pertencem ao Modelo .
fonte
Você está bem !!!!
fonte
Para usuários Kotlin:
fonte