如何有效地编程?按下按钮时创建相应的活动

时间:2013-11-21 01:55:32

标签: java android

我是编程新手,所以我有一个非常简单的问题。由于我真的不知道这些条款我找不到任何关于我的问题的话题,所以请原谅我以前曾经问过这个问题。

我的问题如下:我正在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,则启动活动测试版,否则不执行任何操作。

5 个答案:

答案 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的工作原理,并尝试理解为什么他们已经实现了每个关键字和语法元素。