【问题标题】:How do I properly implement View.OnClickListener and use it with a TextView? [duplicate]如何正确实现 View.OnClickListener 并将其与 TextView 一起使用? [复制]
【发布时间】:2021-01-22 11:32:27
【问题描述】:

我打算将点击侦听器分配给TextView。首先我在MainActivity中实现了View.OnClickListener

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    ...
    TextView title = findViewById(R.id.title);
    title.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            ...
        }
    });
}

然后我在TextView 上设置android:clickable="true"

但是,尽管覆盖了onClick mehtod,但仍会弹出错误消息:

类“MainActivity”必须声明为抽象或在“OnClickListener”中实现抽象方法“onClick(View)”

我能做些什么来避免这个错误?

【问题讨论】:

标签: android onclicklistener


【解决方案1】:

问题的根源在于您的活动声明,有两种处理方法。

  • 让您的活动实现View.onClickListener,并将活动传递给文本视图的setOnClickListener
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    ...
    TextView title = findViewById(R.id.title);
    title.setOnClickListener(this);

    TextView title2 = findViewById(R.id.textview2);
    title2.setOnClickListener(this);


   // implement the onClick method in your MainActivity class
        @Override
        public void onClick(View view) {
            switch(view.getId()){
               case R.id.TextView1 : //logic for textview1
                   break;

               case R.id.TextView2: // logic for textview2
                   break;
            }
        }
}
  • 修改您的 Activity 函数声明并在 setOnClickListener 方法中创建 View.OnClickListener 的新实例。
public class MainActivity extends AppCompatActivity {
    ...
    TextView title = findViewById(R.id.title);
    title.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            ...
        }
    });
}

【讨论】:

  • 关于第一种方法,我想这样做,但问题是我有多个按钮要为其分配点击侦听器。您能否说明如何为每个按钮分配不同的事件侦听器?
  • @WaisKamal 现在检查答案并通过clickListener 将是相同的
  • @WaisKamal 你的问题解决了吗?
【解决方案2】:

由于您正在实施View.OnClickListener,因此您可以对代码进行微小的更改以使其正常工作,

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
   {
        ...
        TextView title = findViewById(R.id.title);
        title.setOnClickListener(this);
    }
    //Outside of onCreate()
    @Override
    public void onClick(View v){ 
    
    //Your code here 
    
      }
    }

【讨论】:

    【解决方案3】:

    从你的类声明中删除implements View.OnClickListener

    【讨论】:

    • 当我删除它时,应用程序在启动时崩溃。
    【解决方案4】:

    根据我的理解,一旦你实现了一个接口,你就必须重写它的所有方法。因此,您是否可以删除 onCreate 中 onClick 的本地声明并覆盖您实现的接口中的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-25
      • 1970-01-01
      • 2021-10-14
      相关资源
      最近更新 更多