Невозможно назначить onClick для кнопки в kotlin - PullRequest
0 голосов
/ 26 июня 2019

Я работаю над проектом студии android, который частично построен в kotlin, а остальные в java.Я никогда не работал с kotlin до этого проекта, и в настоящее время я провожу часы, пытаясь реализовать простое нажатие кнопки.Я знаю, что этот вопрос задавали много, но большинство решений, которые я пробовал, не работают.

вот мой xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/folioPageFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<FrameLayout
    android:id="@+id/webViewLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_above="@+id/indicatorLayout">

    <com.folioreader.ui.view.WebViewPager
        android:id="@+id/webViewPager"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <com.folioreader.ui.view.FolioWebView
        android:id="@+id/folioWebView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</FrameLayout>

<com.folioreader.ui.view.LoadingView
    android:id="@+id/loadingView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:maxVisibleDuration="10000"
    tools:visibility="invisible" >
</com.folioreader.ui.view.LoadingView>

<com.folioreader.ui.view.VerticalSeekbar
    android:id="@+id/scrollSeekbar"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_above="@+id/indicatorLayout"
    android:layout_alignParentRight="true"
    android:layout_marginRight="2dp"
    android:animateLayoutChanges="true"
    android:thumb="@drawable/thumb"
    android:visibility="invisible" />

<Button
        android:text="Button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" tools:layout_editor_absoluteY="655dp"
        tools:layout_editor_absoluteX="161dp"
        android:id="@+id/buttonVasko"
        android:layout_marginTop="530dp"
        android:layout_marginLeft="150dp"

        android:layout_alignParentTop="true" 
        android:layout_alignParentStart="true"
        android:layout_marginStart="0dp"

/>
<LinearLayout
    android:id="@+id/indicatorLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:gravity="center"
    android:orientation="horizontal"
    android:paddingTop="2dp"
    android:paddingBottom="2dp"
    android:visibility="gone">

    <TextView
        android:id="@+id/minutesLeft"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#888888"
        android:textSize="7sp" />

    <TextView
        android:id="@+id/pagesLeft"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#bbbbbb"
        android:textSize="8sp" />
</LinearLayout>

это начало функции onCreateView:

 override fun onCreateView(
    inflater: LayoutInflater,
    container: ViewGroup?, savedInstanceState: Bundle?
): View? {

    buttonVasko.setOnClickListener(object:View.OnClickListener {
        override fun onClick(view:View) {
            Toast.makeText(context,"WORK!!!", Toast.LENGTH_LONG).show()
        }// end onClick
    })

это ошибка, которую я получаюпри запуске кода:

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.folioreader.android.sample, PID: 3862
java.lang.IllegalStateException: Could not find method zoko(View) in a 
parent or ancestor Context for android:onClick attribute defined on view 
class androidx.appcompat.widget.AppCompatButton with id 'buttonVasko'

Я также попытался поместить setOnClickListener в самый конец функции onCreateView, если была строка кода, которую нужно было написать перед setOnClickListener, но результат тот же.

Полный FolioPageFragment находится здесь: https://codeshare.io/5PlwDw

Ответы [ 3 ]

1 голос
/ 26 июня 2019

Вы уже раздули свой фрагмент как mRootView.Вы можете установить прослушиватель onClick в onViewCreated.Вот код

 override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    view.findViewById<Button>(R.id.buttonVasko).setOnClickListener {

    }
}

И вы должны удалить этот статический вид импорта.

import kotlinx.android.synthetic.main.folio_page_fragment.*
import kotlinx.android.synthetic.main.folio_page_fragment.view.*

Надеюсь, он будет работать.

0 голосов
/ 26 июня 2019

Как видно из обсуждения и комментариев, я вижу, что вы используете фрагмент.Фрагмент не ведет себя так же, как активность, он не связывает представления по идентификатору, как активность, когда вы setContentView.В вашем onCreateView, когда вы расширяете представление фрагмента, вам нужно искать представления в этом представлении:

 override fun onCreateView(
    inflater: LayoutInflater,
    container: ViewGroup?, savedInstanceState: Bundle?
): View? {
    val view = inflater.inflate(R.layout.fragment_view, container, false)
    view.buttonVasko.setOnClickListener {
        Toast.makeText(context, "WORK!!!", Toast.LENGTH_LONG).show()
    }
    return view
}
0 голосов
/ 26 июня 2019

сделай так

    buttonVasko.setOnClickListener {
       // your code
Toast.makeText(context,"WORK!!!", Toast.LENGTH_LONG).show()
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...