我遇到了这个问题。我用两个Buttons和一个TextView创建了一个活动。通过按下“下一步”按钮更改TextView,使用按钮“上一步”将TextView更改回原始文件(即textview1)。但是当显示textview1时按下“Previous”或者在显示textview2时按下“Next”时,应用程序会出错并因此关闭。我现在想要实现的是当textview1打开时按钮“Previous”消失,当textview2打开时按钮“Next”消失。
这是我目前使用的课程:
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语句,但我无法使其工作,因为我缺乏知识和经验。如果有人可以帮助我,这将是伟大的。提前谢谢。
答案 0 :(得分: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);
}
}
});
答案 1 :(得分: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);
}
});
答案 2 :(得分:0)
如果您在Previous
处于活动状态时按textview1
(且textIdx为0),textIdx
将变为否定。您无法从数组中获取具有负索引的元素。
同样,当Next
处于活动状态(textIdx为1)时按texview2
,textIdx
变为大于1.您无法获得索引等于或大于1的元素你的数组大小。
我建议您将textIdx++
替换为textIdx = 1
,将textIdx--
替换为textIdx = 0
,以解决崩溃问题。
要使按钮消失,请尝试Next.setVisibility(View.INVISIBLE)
,然后Next.setVisibility(View.VISIBLE)
将其恢复。