有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我是编程新手,所以我有一个非常简单的问题。因为我不知道这些术语,所以我找不到关于我的问题的任何主题,所以如果以前有人问过这个问题,请原谅

我的问题如下:我正在Android机器上运行一个用Eclipse创建的应用程序。在第一个屏幕上,我只有一个按钮列表:

主要布局图:

<Button
    安卓:layout_width="fill_parent"
    安卓:layout_height="fill_parent"
    安卓:layout_weight="1"
    安卓:text="@string/alpha"
    安卓:onClick="alpha" />

<Button
    安卓:layout_width="fill_parent"
    安卓:layout_height="fill_parent"
    安卓:layout_weight="1"
    安卓:text="@string/beta"
    安卓: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,则启动活动beta,否则不执行任何操作


共 (5) 个答案

  1. # 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"
    
  2. # 2 楼答案

    您可以为每个按钮提供如下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);
    }
    

    希望有帮助

  3. # 3 楼答案

    对于您的特定情况,您可以更改处理按钮调用的方式,例如,您可以在单个方法中提供按钮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是如何工作的,并试着理解为什么他们实现了每个关键字和语法元素

  4. # 4 楼答案

    您可以对每个按钮应用相同的侦听器,但不确定它是否更有效,或者是更好的样式,但这可能会起作用。比如:

    ^{pr 1}$

    并在XML中指定相应的id作为下一个应答状态

  5. # 5 楼答案

    有许多不同的方法来实现这一点,并使之更简单。没有一种方法是“最好的”。你正在做的可能是“我不想做的事”

    不要在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" />
    

    (所有其他按钮均相同)

    {cd1}和{cd2}使用的是相同的

    Activity{}方法中的

    您可以获得对每个按钮的引用:

    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);
       } 
    }