【问题标题】:Android Eclipse - Buttons only open one after the otherAndroid Eclipse - 按钮只能一个接一个地打开
【发布时间】: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);

                        }

【问题讨论】:

    标签: java android eclipse button


    【解决方案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,您教会了我一种制作按钮的新方法,而且效果很好!干得好!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-21
      • 1970-01-01
      • 2014-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多