绑定-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();
}
}
我对使用 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();
}
}