Android Eclipse - 按钮只能一个接一个地打开

Posted

技术标签:

【中文标题】Android Eclipse - 按钮只能一个接一个地打开【英文标题】:Android Eclipse - Buttons only open one after the other 【发布时间】:2015-05-06 15:38:24 【问题描述】:

我遇到了一个我无法解决的奇怪问题。

我正在自学 android Eclipse,并创建了一个外观非常简单的应用,其中包含三个按钮:1)Facebook 2)LinkedIn 和 3)Favorite Band。但是,当我在手机上打开应用程序时,我只能按 1) --> 2) --> 3) 的顺序按下按钮。例如,我无法打开 2) 除非我已经打开了 1) 并且我无法打开 3) 除非我已经打开了 2) 等等。如何更改它以便我可以先打开 3)例子?

我已经在下面发布了我的 java 脚本,任何想法都会很棒!


package tabletop.app4asli;

import android.app.Activity;
import android.content.Intent;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;

public class MainActivity extends Activity 
    MediaPlayer thesong;
    Button main;
    Button main2;
    Button main3;

@Override
public void onCreate(Bundle savedInstanceState) 

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    main = (Button) findViewById(R.id.btn_go);
    main.setOnClickListener(new View.OnClickListener() 

        @Override
        public void onClick(View v) 
            String url = "https://www.facebook.com/asli.akidil?fref=ts";
            Intent i = new Intent(Intent.ACTION_VIEW);
            i.setData(Uri.parse(url));
            startActivity(i);

            main2 = (Button) findViewById(R.id.button2);
            main2.setOnClickListener(new View.OnClickListener() 

                @Override
                public void onClick(View v) 
                    String url = "https://www.linkedin.com/pub/asli-akidil/8a/719/55a.";
                    Intent i = new Intent(Intent.ACTION_VIEW);
                    i.setData(Uri.parse(url));
                    startActivity(i);

                    main3 = (Button) findViewById(R.id.button3);
                    main3.setOnClickListener(new View.OnClickListener() 

                        @Override
                        public void onClick(View v) 
                            String url = "http://www.biffyclyro.com";
                            Intent i = new Intent(Intent.ACTION_VIEW);
                            i.setData(Uri.parse(url));
                            startActivity(i);

                        

【问题讨论】:

【参考方案1】:

这是因为按钮2的布局代码包含在按钮1的onClick事件中,而按钮3的布局包含在按钮2的onClicked事件中。

onCreated() 函数的代码应该如下所示:

@Override
public void onCreate(Bundle savedInstanceState) 

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    main = (Button) findViewById(R.id.btn_go);
    main.setOnClickListener(new View.OnClickListener() 

           @Override
           public void onClick(View v) 
                String url = "https://www.facebook.com/asli.akidil?fref=ts";
                Intent i = new Intent(Intent.ACTION_VIEW);
                i.setData(Uri.parse(url));
                startActivity(i);
            
    );
    main2 = (Button) findViewById(R.id.button2);
    main2.setOnClickListener(new View.OnClickListener() 

            @Override
            public void onClick(View v) 
                 String url = "https://www.linkedin.com/pub/asliakidil/8a/719/55a.";
                 Intent i = new Intent(Intent.ACTION_VIEW);
                 i.setData(Uri.parse(url));
                 startActivity(i);
            
    );

    main3 = (Button) findViewById(R.id.button3);
    main3.setOnClickListener(new View.OnClickListener() 

             @Override
             public void onClick(View v) 
                  String url = "http://www.biffyclyro.com";
                  Intent i = new Intent(Intent.ACTION_VIEW);
                  i.setData(Uri.parse(url));
                  startActivity(i);
              
    );

【讨论】:

【参考方案2】:

您在按钮 2 的 ClickListener 中为按钮 3 设置 ClickListener,在按钮 1 的 ClickListener 中为按钮 2 设置 ClickListener。因此,在分别单击按钮 1 和 2 之前,按钮 2 和 3 不会初始化。您可以在 for 循环中将 OnClickListener 设置为所有 Buttons,如下所示:

    ArrayList<Button> buttonList = new ArrayList<Button>();
    buttonList.add((Button) findViewById(R.id.button1));
    buttonList.add((Button) findViewById(R.id.button2));
    buttonList.add((Button) findViewById(R.id.button3));

    ArrayList<String> urlList = new ArrayList<String>();
    urlList.add("https://www.facebook.com/asli.akidil?fref=ts");
    urlList.add("https://www.linkedin.com/pub/asli-akidil/8a/719/55a.");
    urlList.add("http://www.biffyclyro.com");

    for (int i = 0; i < buttonList.size(); i++) 
      final int index = i;
      final Button button = buttonList.get(index);
      final String url = urlList.get(index);
      button.setOnClickListener(new OnClickListener() 
        @Override
        public void onClick(View arg0) 
          Intent i = new Intent(Intent.ACTION_VIEW);
          i.setData(Uri.parse(url));
          startActivity(i);
        
      );
    

【讨论】:

感谢 IndexOutOfBounds,您教会了我一种制作按钮的新方法,而且效果很好!干得好!

以上是关于Android Eclipse - 按钮只能一个接一个地打开的主要内容,如果未能解决你的问题,请参考以下文章

点击按钮后创建文本字段(Eclipse/Android)

Android Eclipse - 单击时创建另一个按钮的按钮

在eclipse上链接.so文件

使用 Eclipse 的 Android 应用程序 - 创建按钮数组

eclipse中android悬停时按钮的Android颜色变化

android eclipse 按钮​​ OnClick 事件