1

我有这个问题。我创建了一个带有两个按钮和一个 TextView 的活动。TextView 通过按下按钮“Next”进行更改,而“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 语句,但我无法让它发挥作用,因为我缺乏知识和经验。如果有人可以在这里帮助我,那就太好了。提前致谢。

4

3 回答 3

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);
            }
            }
            });
于 2012-12-27T20:25:24.993 回答
0

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

@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);
       }
    });
于 2012-12-27T20:27:35.203 回答
0

如果Previoustextview1激活时按下(并且 textIdx 为 0),textIdx则变为负数。您无法从数组中获取具有负索引的元素。

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

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

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

于 2012-12-27T20:29:19.720 回答