绑定-onclick-on-textview-using-butterknife

bind-onclick-on-textview-using-butterknife

我对使用 Butterknife 有点陌生,但遇到了问题。我想单击一个文本视图并打开另一个 activity。我知道如何在不使用 Butterknife 的情况下做到这一点,但这是我目前所做的:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);
    ButterKnife.bind(this);


}

@OnClick(R.id.tv_forgot_pass)
void forgotPassClick(){
        Context mContext = LoginActivity.this;
        Class nextActivity = ForgotPasswordActivity.class;
        Intent mIntent = new Intent(mContext, nextActivity);
        startActivity(mIntent);
        finish();
    }
}

我现在的问题是我不知道如何使用我的 onClick 方法,因为如果我将该方法放在 onCreate 中,activity 将立即打开下一个 activity。我尝试使用 tv_forgot_pass.setOnClickListener 但没有用。而且在 xml 中也不起作用,因为该方法没有视图作为参数。

我在做什么没问题吗?或者有另一种方法可以使用 Butterknife 设置 clicklistner?

我将解释为什么不与

重复

首先,他们使用的是旧版本的 Butterknife,我使用的是 8.8.1 版本,"duplicate question" 使用的是 6.1.0。我的版本不支持 InjectView(现在是 Bind)。其次,我的问题是关于点击 TextView,另一个问题是关于点击按钮。它相似但不相等。最重要的是,我在一个小时前阅读了 "duplicate question",在我提出问题之前,因为我没有找到解决问题的方法,所以我决定 post 我的问题。

对于onClick

@OnClick(R.id.tv_forgot_pass)
    public void onForgotPassClick(View view) {
        Context mContext = LoginActivity.this;
        Intent mIntent = new Intent(mContext, ForgotPasswordActivity.class);
        startActivity(mIntent);
        finish();
    }

无论你做什么都是对的。

@OnClick(R.id.tv_forgot_pass)
void forgotPassClick(){
        Context mContext = LoginActivity.this;
        Class nextActivity = ForgotPasswordActivity.class;
        Intent mIntent = new Intent(mContext, nextActivity);
        startActivity(mIntent);
        finish();
    }

以上代码将在您点击 tv_forgot_pass 时执行。

java.lang.IllegalStateException: Could not find method forgotPassClick(View) in a parent or ancestor Context for android:onClick attribute defined on view class android.support.v7.widget.AppCompatTextView with id 'tv_forgot_pass'

Logcat 显示 IllegalStateException

Signals that a method has been invoked at an illegal or inappropriate time. In other words, the Java environment or Java application is not in an appropriate state for the requested operation.

  • 你应该使用 AppCompatTextView 而不是 TextView.
  • 从 XML.
  • 中删除 android:onClick="forgotPassClick"

XML

<android.support.v7.widget.AppCompatTextView 
    android:id="@+id/tv_forgot_pass"  
    android:focusable="true" 
    .... />

然后

@OnClick(R.id.tv_forgot_pass)
void forgotPassClick(){
        Context mContext = LoginActivity.this;
        Intent mIntent = new Intent(mContext, ForgotPasswordActivity.class);
        startActivity(mIntent);
        finish();
    }
}

做一些改变。 首先将文本视图绑定为 class 的本地视图,如下所示 ..

    @BindView(R.id.myTextView)
TextView myTextView;

然后在 onCreate 方法之后像下面这样绑定黄油刀..

        ButterKnife.bind(this);

然后在应用如下所示的点击事件后..

    @OnClick(R.id.myTextView)
private void goNextActivity(){
    Intent mIntent = new Intent(this, ForgotPasswordActivity.class);
    startActivity(mIntent);
    finish();
}

并且 activity 都在 android 清单文件中定义。

在 oncreate 之前使用 @Bind 可以正常工作

public class Login extends AppCompatActivity {

@Bind(R.id.tv_forgot_pass)
    Button button;

   @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);
    ButterKnife.bind(this);


}

@OnClick(R.id.tv_forgot_pass)
public void forgotPassClick(){
        Context mContext = LoginActivity.this;
        Class nextActivity = ForgotPasswordActivity.class;
        Intent mIntent = new Intent(mContext, nextActivity);
        startActivity(mIntent);
        finish();
    }
}