【问题标题】:Android TextView OnClick-Event doesn't workAndroid TextView OnClick-Event 不起作用
【发布时间】:2019-10-26 20:50:55
【问题描述】:

我必须编写一个井字游戏应用程序:

这是activity_main.xml的代码: (这是一个简单的 3x3 文本视图字段,黑色背景)

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#000000"
    android:screenOrientation="portrait"
    tools:context=".MainActivity">

    <androidx.gridlayout.widget.GridLayout
        android:layout_width="294dp"
        android:layout_height="286dp"
        android:background="#000000"
        app:layout_constraintBottom_toTopOf="@+id/button"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView">

        <TextView
            android:id="@+id/tictactoe_center_left"
            android:layout_width="97dp"
            android:layout_height="wrap_content"
            android:clickable="true"
            android:focusable="true"
            android:editable="false"
            android:ems="10"
            android:enabled="false"
            android:onClick="click_center_left"
            android:text="@string/game_playersymbol_x"
            android:textAlignment="center"
            android:textColor="#FFFFFF"
            android:textSize="70sp"
            android:textStyle="bold"
            app:layout_column="0"
            app:layout_row="1" />

        <TextView
            android:id="@+id/tictactoe_center_right"
            android:layout_width="97dp"
            android:layout_height="wrap_content"
            android:clickable="true"
            android:focusable="true"
            android:editable="false"
            android:ems="10"
            android:enabled="false"
            android:onClick="click_center_right"
            android:text="@string/game_playersymbol_x"
            android:textAlignment="center"
            android:textColor="#FFFFFF"
            android:textSize="70sp"
            android:textStyle="bold"
            app:layout_column="2"
            app:layout_row="1" />

        <TextView
            android:id="@+id/tictactoe_center_center"
            android:layout_width="97dp"
            android:layout_height="wrap_content"
            android:clickable="true"
            android:focusable="true"
            android:editable="false"
            android:ems="10"
            android:enabled="false"
            android:onClick="click_center_center"
            android:text="@string/game_playersymbol_x"
            android:textAlignment="center"
            android:textColor="#FFFFFF"
            android:textSize="70sp"
            android:textStyle="bold"
            app:layout_column="1"
            app:layout_row="1" />

        <TextView
            android:id="@+id/tictactoe_top_left"
            android:layout_width="97dp"
            android:layout_height="wrap_content"
            android:clickable="true"
            android:ems="10"
            android:enabled="false"
            android:focusable="true"
            android:onClick="click_top_left"
            android:textAlignment="center"
            android:textColor="#FFFFFF"
            android:textSize="70sp"
            android:textStyle="bold"
            app:layout_column="0"
            app:layout_row="0"
            tools:text="@string/game_playersymbol_x" />

        <TextView
            android:id="@+id/tictactoe_top_center"
            android:layout_width="97dp"
            android:layout_height="wrap_content"
            android:clickable="true"
            android:focusable="true"
            android:editable="false"
            android:ems="10"
            android:enabled="false"
            android:onClick="click_top_center"
            android:text="@string/game_playersymbol_x"
            android:textAlignment="center"
            android:textColor="#FFFFFF"
            android:textSize="70sp"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/tictactoe_top_right"
            android:layout_width="97dp"
            android:layout_height="wrap_content"
            android:clickable="true"
            android:focusable="true"
            android:editable="false"
            android:ems="10"
            android:enabled="false"
            android:onClick="click_top_right"
            android:text="@string/game_playersymbol_x"
            android:textAlignment="center"
            android:textColor="#FFFFFF"
            android:textSize="70sp"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/tictactoe_bottom_left"
            android:layout_width="97dp"
            android:layout_height="wrap_content"
            android:clickable="true"
            android:focusable="true"
            android:editable="false"
            android:ems="10"
            android:enabled="false"
            android:onClick="click_bottom_left"
            android:text="@string/game_playersymbol_x"
            android:textAlignment="center"
            android:textColor="#FFFFFF"
            android:textSize="70sp"
            android:textStyle="bold"
            app:layout_column="0"
            app:layout_row="2" />

        <TextView
            android:id="@+id/tictactoe_bottom_right"
            android:layout_width="97dp"
            android:layout_height="wrap_content"
            android:clickable="true"
            android:focusable="true"
            android:editable="false"
            android:ems="10"
            android:enabled="false"
            android:onClick="click_bottom_right"
            android:text="@string/game_playersymbol_x"
            android:textAlignment="center"
            android:textColor="#FFFFFF"
            android:textSize="70sp"
            android:textStyle="bold"
            app:layout_column="2"
            app:layout_row="2" />

        <TextView
            android:id="@+id/tictactoe_bottom_center"
            android:layout_width="97dp"
            android:layout_height="wrap_content"
            android:clickable="true"
            android:focusable="true"
            android:editable="false"
            android:ems="10"
            android:enabled="false"
            android:onClick="click_bottom_center"
            android:text="@string/game_playersymbol_x"
            android:textAlignment="center"
            android:textColor="#FFFFFF"
            android:textSize="70sp"
            android:textStyle="bold"
            app:layout_column="1"
            app:layout_row="2" />

    </androidx.gridlayout.widget.GridLayout>

    <Button
        android:id="@+id/button"
        android:layout_width="213dp"
        android:layout_height="61dp"
        android:layout_marginBottom="56dp"
        android:background="@drawable/roundbutton"
        android:text="@string/menu_play_singleplayer"
        android:textColor="#FFFFFF"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/app_name"
        android:textColor="#979797"
        android:textSize="50sp"
        android:textStyle="bold"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintHorizontal_bias="0.497"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.066" />

</androidx.constraintlayout.widget.ConstraintLayout>

这是MainActivity.java的代码:

package com.example.tictactoe;

import androidx.appcompat.app.AppCompatActivity;

import android.content.pm.ActivityInfo;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    private int counter = 1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        getSupportActionBar().hide();
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    }

    public void click_top_left(View v) { click_action((TextView)findViewById(R.id.tictactoe_top_left)); }
    public void click_top_center(View v) { click_action((TextView)findViewById(R.id.tictactoe_top_center)); }
    public void click_top_right(View v) { click_action((TextView)findViewById(R.id.tictactoe_top_right)); }

    public void click_center_left(View v) { click_action((TextView)findViewById(R.id.tictactoe_center_left)); }
    public void click_center_center(View v) { click_action((TextView)findViewById(R.id.tictactoe_center_center)); }
    public void click_center_right(View v) { click_action((TextView)findViewById(R.id.tictactoe_center_right)); }

    public void click_bottom_left(View v) { click_action((TextView)findViewById(R.id.tictactoe_bottom_left)); }
    public void click_bottom_center(View v) { click_action((TextView)findViewById(R.id.tictactoe_bottom_center)); }
    public void click_bottom_right(View v) { click_action((TextView)findViewById(R.id.tictactoe_bottom_right)); }

    public void click_action(TextView tv) {
        if ((counter%2)==0)
            tv.setText("O");
        else
            tv.setText("X");
        counter++;
    }
}

我已将 android:clickable 设置为 true。 我设置了一个 onclick 监听器。 我根本找不到我的错误......

我将不胜感激任何形式的帮助!

【问题讨论】:

  • 但我在 xml 文件中设置了一个 android:onClick。这还不够吗? @MartinZeitler
  • 你不能打电话给click_action((TextView) v); 吗?
  • 是的,我试过了,但它似乎也不起作用。于是我尝试通过id获取textview(如上图)

标签: java android xml tic-tac-toe


【解决方案1】:

你已经设置了所有TextViews:

android:enabled="false"

为什么?
将其更改为:

android:enabled="true"

【讨论】:

  • 如果启用了 TextView,用户可以编辑其中的文本。我只希望他能够点击它。我还检查了这是否导致问题并将所有变量设置为 false。这并没有改变什么
  • TextView 不可编辑。我用 enabled="true" 复制了你的代码,它触发了点击事件
【解决方案2】:

首先为您的文本视图提供一个 id,然后定义一个像 Textview textview 这样的示例,在 java 中找到它并在 onCreate 方法中使用 setOnClickListener(),如下所示。它肯定会起作用。 textveiw.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { }});

【讨论】:

  • 也不起作用。当我点击文本视图时,似乎没有调用 onClick() 方法...
猜你喜欢
  • 1970-01-01
  • 2014-12-02
  • 2013-08-05
  • 2014-07-19
  • 2021-10-22
  • 1970-01-01
  • 2017-12-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多