Android中的setOnClickListener()[关闭]
Posted
技术标签:
【中文标题】Android中的setOnClickListener()[关闭]【英文标题】:setOnClickListner () in Android [closed] 【发布时间】:2016-08-25 06:59:07 【问题描述】:如果屏幕(UI)中有这么多按钮,需要做单独的功能,对于这种场景,我们可以为每个按钮使用 setOnClickListner 吗?或者有什么优化的方法来处理呢?
【问题讨论】:
我认为ButterKnife
是解决您问题的好方法。
【参考方案1】:
我通常会这样做:
public class Menu extends AppCompatActivity
Private Button button1, button2, button3, button4, button5;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_menu);
button1 = (Button) findViewById(R.id.button1);
button2 = (Button) findViewById(R.id.button2);
button3 = (Button) findViewById(R.id.button3);
button4 = (Button) findViewById(R.id.button4);
button5 = (Button) findViewById(R.id.button5);
Button[] buttons = new Button[] button1, button2, button3, button4, button5;
final String[] functions= new String[] "options", "exit", "credits", "more", "pictures";
for (int i = 0; i < buttons.length; i++)
final String function = functions[i].toString();
buttons[i].setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
StartIntent(function);
);
private StartIntent (String function)
Intent i;
switch (function)
case options:
i = new Intent(this, OptionsActivity.class);
break;
case options:
i = new Intent(this, ExitActivity.class);
break;
case options:
i = new Intent(this, CreditsActivity.class);
break;
case options:
i = new Intent(this, MoreActivity.class);
break;
case options:
i = new Intent(this, PicturesActivity.class);
break;
default:
Log.e("StartIntent", "invalid function");
return;
startActivity(i);
这将根据您单击的按钮打开不同的意图,但这实际上取决于您的情况。
【讨论】:
【参考方案2】:让你的activity实现View.onClickListener
并切换发送的View
id:
public class YourActivity extends ... implements View.OnClickListener
...
@Override
public void onCreate(Bundle savedInstanceState)
...
button1.setOnClickListener(this);
button2.setOnClickListener(this);
...
@Override
public void onClick(View view)
switch (view.getId())
case R.id.yourFirstButton:
...
break;
case R.id.yourSecondButton:
...
break;
...
【讨论】:
【参考方案3】:实现这一点的最佳方法是实现 View.OnClickListener。 在 onClick() 中,您可以将开关盒用于按钮。
@Override
public void onClick(View v)
switch(v.getId())
case R.id.Button1 : //Your button code
break;
case R.id.Button2 : // Your Second Button code
break;
.
.
.
.
【讨论】:
【参考方案4】:如果您的 UI 中有太多按钮,您可以按照此步骤操作
在您的设计页面 (XML) 中,对具有相同名称的每个活动使用“onClick()”方法。在我的情况下,它是 android:onClick="onClickButton"
<Button
android:id="@+id/button1"
android:layout_
android:layout_
android:onClick="onClickButton"
android:textColor="@color/icons" />
<Button
android:id="@+id/button2"
android:layout_
android:layout_
android:onClick="onClickButton"
android:textColor="@color/icons" />
现在在Activity页面使用方法是这样的,
public void onClickButton(View v)
switch(v.getId())
case R.id.button1:
//do your work related to on click button1
break;
case R.id.button2:
//do your work related to on click button2
break;
....
您可以在机箱中使用任意数量的按钮。 希望对您有所帮助!
【讨论】:
以上是关于Android中的setOnClickListener()[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
Android- void setOnClickListener 想要返回
无法解析符号'setOnClickListener' - Android Studio
Android:在 onBindViewHolder 中放置 setOnclickListener 或 setOnLongClickListener 是不是正确?
尝试调用虚拟方法 'void android.widget.Button.setOnClickListener(android.view.View$onClickListener)'
Android Studio:尝试在空对象引用上调用虚拟方法“void android.view.View.setOnClickListener”