我是编程新手,所以我有一个非常简单的问题。由于我真的不知道这些条款我找不到任何关于我的问题的话题,所以请原谅我以前曾经问过这个问题。
我的问题如下:我正在Android机器上运行使用Eclipse创建的应用程序。在第一个屏幕上,我只有一个按钮列表:
layout_main:
<Button
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"
android:text="@string/alpha"
android:onClick="alpha" />
<Button
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"
android:text="@string/beta"
android:onClick="beta" />
如果我按下按钮,则会启动相应的活动。我将主要活动编程如下:
主要活动:
public void alpha(View view) {
Intent intent = new Intent(this, AlphaActivity.class);
startActivity(intent); }
public void beta(View view) {
Intent intent = new Intent(this, BetaActivity.class);
startActivity(intent); }
由于我有很多按钮,因此如上所述,我将有多次操作公共空间。有没有办法让它更有效率?例如:启动新活动,如果选择了alpha,则启动活动alpha,如果选择了beta,则启动活动测试版,否则不执行任何操作。
答案 0 :(得分:1)
你可以对每个按钮应用相同的监听器,不确定它是否更高效甚至更好的风格,但这可能会起作用。类似的东西:
public void buttonListen(View view)
{
Class clas;
int id = view.getId();
switch(id)
{
case R.id.alpha:
clas = AlphaActivity.class;
break;
case R.id.alpha:
clas = BetaActivity.class;
break;
...
case R.id.zeta:
clas = ZetaActivity.class;
break;
}
startActivity(new Intent(this, clas));
}
并在XML中指定相应的id作为下一个答案状态。
答案 1 :(得分:1)
你可以给每个按钮一个这样的id:
<Button
android:id="@+id/alpha"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"
android:text="@string/alpha"
/>
<Button
android:id="@+id/beta"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"
android:text="@string/beta"
/>
然后在主活动中你可以findviewbyid()找到两个按钮并给出onclicklistener按钮,然后你就像这样实现onclicklistener:
public void onClick(View v) {
Intent i = new Intent();
switch(v.getid()){
case: R.id.alpha:
i.setClass(context,AlphaActivity.class);
break;
case: R.id.beta:
i.setClass(context,BetaActivity.class);
break;
}
startActivity(i);
}
希望有所帮助。
答案 2 :(得分:1)
有很多方法可以实现目标。
注意:最好的解决方案是将android:id
添加到您的布局文件中,但如果由于某种原因您无法执行此操作,则可以使用按钮文本。
如果所有按钮都有唯一的文本,那么在不更改布局文件的情况下执行此操作非常简单(尽管不是很好)的方法就是查看按钮上的文本,并根据该操作执行操作。
public void onButtonClick(View view)
{
//Cast the click View into a Button
Button selectedButton = (Button) view;
Intent intent = new Intent();
String buttonText = selectedButton.getText().toString();
if(buttonText.equals("beta"))
{
intent = new Intent(this, BetaActivity.class);
}
else if(buttonText.equals("alpha"))
{
intent = new Intent(this AlphaActivity.class);
}
startActivity(intent);
}
确保为布局文件中的每个按钮设置onClick以调用此方法
android:onClick="onButtonClick"
答案 3 :(得分:1)
有许多不同的方法可以实现这一目标并使其更简单。没有一种方法是最好的&#34;。你正在做的事情可能在&#34;我不会做什么&#34;的列表中。
不要在XML中分配内容,使用起来比较困难,在运行时无法真正改变,并且在必须维护许多不同的布局时使其不那么便携。代替...
这只是一种方法:
不是在XML中定义onClick方法,而是以编程方式执行。
在您的视图中添加一个Android ID:
<Button
android:id="@+id/alpha_button"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="@string/alpha" />
(所有其他按钮都一样)
注意:请勿使用fill_parent
,请使用match_parent
(前者已被弃用且两者都相同)。
使用Activity
onCreate()
方法,就在您之前setContentView(R.layout.your_above_layout_with_the_buttons);
您可以获得对每个按钮的引用:
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.your_above_layout_with_the_buttons);
final TextView alphaButton = (TextView) findViewById(R.id.alpha_button);
//etc for the rest
// now add click listeners:
alphaButton.setOnClickListener(this);// more on this later
betaButton.setOnClickListener(this);
// etc.
}
现在你的活动应该是:
public class YourActivity extends Activity implements View.OnClickListener {
在您的活动中的某个地方,您必须实施:
@Override
public void onClick(final View view) {
// which button was clicked? Different ways to tell… a simple one:
Intent intent;
switch (v.getId()) {
case R.id.alpha_button:
intent = new Intent(this, AlphaActivity.class);
break;
case R.id.beta_button:
intent = new Intent(this, BetaActivity.class);
break;
//etc.
}
if (intent != null) {
startActivity(intent);
}
}
答案 4 :(得分:0)
根据您的具体情况,您可以更改按钮处理呼叫的方式,例如,您可以通过单个方法提供按钮ID并检查按钮的ID。
<Button
android:id="@+id/alpha_button"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"
android:text="@string/alpha"
android:onClick="onButtonClick" />
<Button
android:id="@+id/beta_button"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"
android:text="@string/beta"
android:onClick="onButtonClick" />
public void onButtonClick(View view) {
Intent intent;
switch (view.getId()) {
case R.id.alpha_button:
intent = new Intent(this, AlphaActivity.class);
break;
case R.id.beta_button:
intent = new Intent(this, BetaActivity.class);
break;
default:
return;
}
startActivity(intent);
}
但是,我建议您当前的代码清晰简洁,所以请保持原样。有很多方法可以解决问题,特别是在设计软件时。
一般而言,编程语言试图平衡使代码(更重要的是它的功能或目的)易于阅读/理解,同时尽量使语法尽可能简洁。随着时间的推移,您将了解每种语言的优缺点及其语法,有些人会更好地解决某些类型的问题,而对于解决其他问题则过于冗长。现在,只需了解Java的工作原理,并尝试理解为什么他们已经实现了每个关键字和语法元素。