【问题标题】:How to make button disappear when certain TextView is displayed?显示某些TextView时如何使按钮消失?
【发布时间】:2012-12-13 04:52:20
【问题描述】:

我遇到了这个问题。我创建了一个带有两个按钮和一个 TextView 的活动。通过按下按钮“Next”来更改 TextView,而“Previous”按钮用于将 TextView 更改回其原始状态(即 textview1)。但是,当在显示 textview1 时按下“上一个”或在显示 textview2 时按下“下一个”时,应用程序会出错并因此被关闭。我现在想要实现的是让“上一个”按钮在 textview1 开启时消失,在 textview2 开启时让“下一个”按钮消失。

这是我目前使用的类:

package com.example.test8;

import android.os.Bundle;
import android.app.Activity;
import android.graphics.Typeface;
import android.view.Menu;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ImageButton;
import android.widget.TextView;

public class Main extends Activity {
    private static final String[] Texts= 
        {"textview1",
         "textview2"
        };

int textIdx = 0;

TextView Text;
ImageButton Next;
ImageButton Previous;

public static String getText(int idx) { 
    return Texts[idx]; 
} 

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    final TextView text = (TextView) findViewById(R.id.text);
    ImageButton Next = (ImageButton) findViewById(R.id.Next);
    ImageButton Previous = (ImageButton) findViewById(R.id.Previous);
    Text.setText(getText(textIdx));

    Next.setOnClickListener(new View.OnClickListener() {  
        public void onClick(View v) { 
        textIdx++; 
        Text.setText(getText(textIdx)); 
        } 
    }); 

    Previous.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
        textIdx--;
        Text.setText(getText(textIdx)); 
        }
        });

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;
}

我曾想过使用 else if 语句,但我无法实现,因为我缺乏知识和经验。如果有人可以在这里帮助我,那就太好了。提前致谢。

【问题讨论】:

    标签: android eclipse button textview


    【解决方案1】:

    你可以只使用一个简单的 if 语句

         Next.setOnClickListener(new View.OnClickListener() {  
                public void onClick(View v) { 
                if(textIdx == 0)
                {
                    textIdx++; 
                    Text.setText(getText(textIdx)); 
                    Next.setVisibility(View.INVISIBLE);
                    Previous.setVisibility(View.VISIBLE);
                }
                } 
            }); 
    
            Previous.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {
    
                if(textIdx == 1)
                {
                    textIdx--;
                    Text.setText(getText(textIdx)); 
                    Next.setVisibility(View.VISIBLE);
                    Previous.setVisibility(View.INVISIBLE);
                }
                }
                });
    

    【讨论】:

    • 您好,感谢您的努力。但是使用这个我得到一个错误:方法 setVisible(boolean) 没有为 ImageButton 类型定义。然后我将其更改为 setClickable(...),但是在打开应用程序时我遇到了同样的崩溃。
    • 哦,糟糕,我想应该是.setVisibility(boolean)
    【解决方案2】:

    您应该禁用这些按钮,以防止用户在阵列中前面或后面没有任何东西时单击它。

    @Override
    protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
    
       final TextView text = (TextView) findViewById(R.id.text);
       ImageButton Next = (ImageButton) findViewById(R.id.Next);
       ImageButton Previous = (ImageButton) findViewById(R.id.Previous);
       Text.setText(getText(textIdx));
    
       Previous.setEnabled(false); //defaults the button to disabled
    
       Next.setOnClickListener(new View.OnClickListener() {  
           public void onClick(View v) { 
           textIdx++; 
           Text.setText(getText(textIdx));            
           Previous.setEnabled(true);
           if(textIdx>=Text.length-1)
              Next.setEnabled(false);  
           } 
       }); 
    
       Previous.setOnClickListener(new View.OnClickListener() {
           public void onClick(View v) {
           textIdx--;
           Text.setText(getText(textIdx));            
           Next.setEnabled(true);
           if(textIdx<=0)
              Previous.setEnabled(false);
           }
        });
    

    【讨论】:

    • 我试图让代码解释两个以上元素的字符串数组。不确定它是否对您的项目来说太过分了,但认为它将来可能会对您有所帮助
    【解决方案3】:

    如果您在textview1 处于活动状态(并且textIdx 为0)时按Previous,则textIdx 变为负数。您无法从数组中获取具有负索引的元素。

    同样,当您在 texview2 处于活动状态(textIdx 为 1)时按 Next 时,textIdx 变为大于 1。您无法获取索引等于或大于数组大小的元素。

    我建议你用textIdx = 1替换textIdx++,用textIdx = 0替换textIdx--,这样可以解决崩溃问题。

    要使按钮消失,请尝试Next.setVisibility(View.INVISIBLE)Next.setVisibility(View.VISIBLE) 来恢复它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-27
      • 1970-01-01
      • 1970-01-01
      • 2014-04-19
      • 2018-01-20
      • 1970-01-01
      • 1970-01-01
      • 2021-07-15
      相关资源
      最近更新 更多