【问题标题】:Is there a way to write a same onclick function for multiple controls?有没有办法为多个控件编写相同的 onclick 函数?
【发布时间】:2018-09-26 06:45:34
【问题描述】:
我遇到了一个问题,我有多个文本视图应该具有相同的 onclick 功能。我显然可以编写多个 onclick,但我想要一个优化的代码。
例如,我有红色的文本视图和蓝色的其他文本视图,我希望所有红色都具有相同的 onclick,而所有蓝色都具有与红色不同的相同 onclick 功能。
有没有办法在android java中实现这一点?
【问题讨论】:
标签:
android
textview
onclicklistener
【解决方案1】:
在View.OnClickListener 类型的变量中声明您的点击事件,然后将其分配给您的文本视图,如下所示:
View.OnClickListener eventVar = new View.OnClickListener() {
@Override
public void onClick(View view) {
//do what you need
}
};
textview1.setOnClickListener(eventVar);
textview2.setOnClickListener(eventVar);
textview3.setOnClickListener(eventVar);
textview4.setOnClickListener(eventVar);
【解决方案2】:
为红色分配一个 id,为蓝色分配另一个 id。并写一个switch语句,if如下
switch (id)
case 0:
runAmethod();
break;
case 1:
runAnotherMethod():
break;
default:
【解决方案3】:
Write a common function for your all the color textview like
private void clickOfRedTextView(){
// your code.
}
Now implement your activity or fragment with OnClickListener listener and pass the on click
textviewred1.setOnClickListener(this);
textviewred2.setOnClickListener(this);
// so on ...
In the override method of onclick you can have a switch case with view id as follow.
public void onClick(View v) {
switch (v.getId()) {
case R.id.textviewred1:
case R.id.textviewred2:
so on....
// your function you want to call will come here.
clickOfRedTextView();
break;
}
}
【解决方案4】:
你可以用这个最简单的方法:
在你的 xml 文件中为你的红色文本视图和蓝色文本视图定义你的 onClick。
<TextView
//other attributes...
android:onClick="redTextViewMethod"/>
<TextView
//other attributes...
android:onClick="blueTextViewMethod"/>
然后像这样在你对应的Java文件中定义redTextViewMethod方法
private void redTextViewMethod() {
//your code
}
private void blueTextViewMethod() {
//your code
}
【解决方案5】:
解决方案:
首先,创建获取TextView点击的通用公共方法,
public void onTextViewClick(View v) {
switch (v.getId()) {
case R.id.VIEW_ID:
case R.id.VIEW_ID:
case R.id.VIEW_ID:
// Performs action for Blue Text View
break;
case R.id.VIEW_ID:
case R.id.VIEW_ID:
// Performs action for Red Text View
break;
}
}
然后,在你的 xml 中像这样写TextView onClick,
<TextView
...
android:onClick="onTextViewClick"/>