Java 切换多个按钮的可见性

Java 切换多个按钮的可见性,java,android,android-layout,android-intent,visibility,Java,Android,Android Layout,Android Intent,Visibility,在我的应用程序中,我试图在RealViewSwitcher中切换两个透明按钮的可见性(我知道这相当粗糙)。我正在根据RealViewSwitcher的当前页面更改可见性。我可以让第一个按钮工作,但是第二个按钮从未激活。这是我的密码: /////////////// if(realViewSwitcher.getCurrentScreen() == 0) { final Button btn1 = (Button)findViewById(R.id.btn1);

在我的应用程序中,我试图在RealViewSwitcher中切换两个透明按钮的可见性(我知道这相当粗糙)。我正在根据RealViewSwitcher的当前页面更改可见性。我可以让第一个按钮工作,但是第二个按钮从未激活。这是我的密码:

///////////////

    if(realViewSwitcher.getCurrentScreen() == 0)
    {

        final Button btn1 = (Button)findViewById(R.id.btn1);

        btn1.setOnClickListener(new View.OnClickListener()
        {       
            @Override
            public void onClick(View v)
            {
                Intent intent = new Intent();
                intent.setAction(Intent.ACTION_VIEW);
                intent.addCategory(Intent.CATEGORY_BROWSABLE);
                intent.setData(Uri.parse("http://www.test.com"));
                startActivity(intent);

                btn1.setVisibility(View.GONE);

            }
        });
    } 

    else if(realViewSwitcher.getCurrentScreen() == 2)
    {
        final Button btn2 = (Button)findViewById(R.id.btn2);
        btn2.setVisibility(0);

        btn2.setOnClickListener(new View.OnClickListener()
        {       
            @Override
            public void onClick(View v) 
            {

                Intent intent = new Intent(Intent.ACTION_SEND); 
                String[] tos = { "info@email.com" }; 
                intent.putExtra(Intent.EXTRA_EMAIL, tos); 
                intent.putExtra(Intent.EXTRA_TEXT, "body"); 
                intent.putExtra(Intent.EXTRA_SUBJECT, "subject"); 
                intent.setType("message/rfc882"); 
                Intent.createChooser(intent, "Choose Email Client");

            }
        });
    }

    ///////////////
    //end
    /////////////////////
这是xml

    <Button 
        android:id="@+id/btn1"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:background="@null"/>

    <Button 
        android:id="@+id/btn2"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:background="@null"
        android:visibility="gone"/> 

您的代码只需要稍微清理一下

  • 首先,按钮应该声明为字段。实际上,它们只是if语句的实例变量
  • 出于同样的原因,应该在if语句之外声明click侦听器。在
    onCreate()
    或任何适合您的地方声明它们
  • getCurrentWindow()
    设置开关。如果。。。否则如果。。。否则,如果…
  • 我可否建议:

    final Button btn1 = (Button) findViewById(R.id.btn1);
    final Button btn2 = (Button )findViewById(R.id.btn2);
    
    //Inside onCreate() or similar
    btn1.setOnClickListener(new View.OnClickListener() {       
        @Override
        public void onClick(View v) {
            Intent intent = new Intent();
            intent.setAction(Intent.ACTION_VIEW);
            intent.addCategory(Intent.CATEGORY_BROWSABLE);
            intent.setData(Uri.parse("http://www.test.com"));
    
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  //Required to start a new activity
            startActivity(intent);
    
            btn1.setVisibility(View.GONE);
    
        }
    });
    
    //In the same place
    btn2.setOnClickListener(new View.OnClickListener() {       
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(Intent.ACTION_SEND); 
            String[] tos = { "info@email.com" }; 
            intent.putExtra(Intent.EXTRA_EMAIL, tos); 
            intent.putExtra(Intent.EXTRA_TEXT, "body"); 
            intent.putExtra(Intent.EXTRA_SUBJECT, "subject"); 
            intent.setType("message/rfc882"); 
            Intent.createChooser(intent, "Choose Email");
            btn2.setVisibility(View.VISIBLE);
        }
    });
    
    //Later, in your other functional code
    switch (realViewSwitcher.getCurrentScreen()) {
        case 0:
            //do your stuff
            break;
        case 2:
            //other stuff
            break;
        default: //If you need it
            throw new Exception("Oops...");
    }
    

    你的代码只需要稍微清理一下

  • 首先,按钮应该声明为字段。实际上,它们只是if语句的实例变量
  • 出于同样的原因,应该在if语句之外声明click侦听器。在
    onCreate()
    或任何适合您的地方声明它们
  • getCurrentWindow()
    设置开关。如果。。。否则如果。。。否则,如果…
  • 我可否建议:

    final Button btn1 = (Button) findViewById(R.id.btn1);
    final Button btn2 = (Button )findViewById(R.id.btn2);
    
    //Inside onCreate() or similar
    btn1.setOnClickListener(new View.OnClickListener() {       
        @Override
        public void onClick(View v) {
            Intent intent = new Intent();
            intent.setAction(Intent.ACTION_VIEW);
            intent.addCategory(Intent.CATEGORY_BROWSABLE);
            intent.setData(Uri.parse("http://www.test.com"));
    
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  //Required to start a new activity
            startActivity(intent);
    
            btn1.setVisibility(View.GONE);
    
        }
    });
    
    //In the same place
    btn2.setOnClickListener(new View.OnClickListener() {       
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(Intent.ACTION_SEND); 
            String[] tos = { "info@email.com" }; 
            intent.putExtra(Intent.EXTRA_EMAIL, tos); 
            intent.putExtra(Intent.EXTRA_TEXT, "body"); 
            intent.putExtra(Intent.EXTRA_SUBJECT, "subject"); 
            intent.setType("message/rfc882"); 
            Intent.createChooser(intent, "Choose Email");
            btn2.setVisibility(View.VISIBLE);
        }
    });
    
    //Later, in your other functional code
    switch (realViewSwitcher.getCurrentScreen()) {
        case 0:
            //do your stuff
            break;
        case 2:
            //other stuff
            break;
        default: //If you need it
            throw new Exception("Oops...");
    }
    

    不要为setVisibility之类的调用硬编码int值。始终使用View.GONE等。如果(realViewSwitcher.getCurrentScreen()==2)应为else如果(realViewSwitcher.getCurrentScreen()==1)(将2更改为1)?如果您可以发布完整的布局XML,这将很有帮助。它必须等于2,从而引用realViewSwitcher的第三页。只有第一页和第三页上有超链接活动。第二页和第四页只是文本。我的xml马上就要发布了,谢谢。不要为setVisibility之类的调用硬编码int值。始终使用View.GONE等。如果(realViewSwitcher.getCurrentScreen()==2)应为else如果(realViewSwitcher.getCurrentScreen()==1)(将2更改为1)?如果您可以发布完整的布局XML,这将很有帮助。它必须等于2,从而引用realViewSwitcher的第三页。只有第一页和第三页上有超链接活动。第二页和第四页只是文本。我的xml马上就要发布了,谢谢。太棒了!谢谢你的帮助,我会试一试的!太棒了!谢谢你的帮助,我会试一试的!