我目前正在探索如何使用EditText,Button和TextView。
我的程序有一个EditText,当EditText中没有输入任何内容并单击一个按钮时,TextView将显示3秒钟并再次变为不可见。
但是,当我第二次单击该按钮并且仍然清除EditText时,TextView将不会出现
如何让TextView再次显示?
public class NameActivity extends AppCompatActivity{
private EditText editNameText;
private TextView wrongInputTV;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_name);
Log.i(Values.TAG, "NameActivity onCreate");
editNameText = (EditText) findViewById(R.id.editNameText);
editNameText.getText().clear();
wrongInputTV = (TextView) findViewById(R.id.wrongInputTV);
wrongInputTV.setTextColor(Color.RED);
((Button) findViewById(R.id.sendNameBtn)).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
goToNextActivity();
}
});
}
private void goToNextActivity(){
if(!TextUtils.isEmpty(editNameText.getText())) {;
Intent intent = new Intent(this, DateActivity.class);
intent.putExtra(Values.NAME_KEY, editNameText.getText().toString());
startActivity(intent);
}else {
wrongInputTV.setText("Please enter a valid name");
wrongInputTV.postDelayed(new Runnable() {
@Override
public void run() {
wrongInputTV.setVisibility(View.INVISIBLE);
}
}, 3000);
}
}
}
答案 0 :(得分:3)
在runnable中进行VISIBLE
时,您必须再次制作textview INVISIBLE
。
wrongInputTV.setVisibility(View.VISIBLE);
因此,goToNextActivity()应写成如下: -
private void goToNextActivity(){
if(!TextUtils.isEmpty(editNameText.getText())) {;
Intent intent = new Intent(this, DateActivity.class);
intent.putExtra(Values.NAME_KEY, editNameText.getText().toString());
startActivity(intent);
}else {
wrongInputTV.setVisibility(View.VISIBLE);
wrongInputTV.setText("Please enter a valid name");
wrongInputTV.postDelayed(new Runnable() {
@Override
public void run() {
wrongInputTV.setVisibility(View.INVISIBLE);
}
}, 3000);
}
注意: 可以在OnCreate方法中设置初始VIEW状态GONE / INVISIBLE。
答案 1 :(得分:0)
使用TextView
时,了解基于视图可见性可以看到的内容之间的区别以及您可以看到的内容之间的区别非常重要。视图的文字。
您的原始代码工作一次的原因,但永远不再是您的TextView
开始可见但空(您可以"请参阅&#34 ;但是没有什么可看的。然后,您拨打setText()
,将其设为可见,非空(现在可以查看)。然后,在三秒钟之后,您将其设为隐藏和非空(所以即使有什么东西要看,也无法看到它)
但是,在您创建VISIBLE
后,代码中的任何内容都不会将视图的可见性返回更改为INVISIBLE
。 @ lib4的答案涵盖(单向)如何做到这一点。
答案 2 :(得分:0)
这就是我处理它的方式....
public class MainActivity extends AppCompatActivity {
TextView textView;
EditText editText;
Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = findViewById(R.id.textView);
editText = findViewById(R.id.editText);
button = findViewById(R.id.button);
textView.setVisibility(View.GONE);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(editText.getText().toString().equals("") || editText.getText().toString() == null) {
textView.setVisibility(View.VISIBLE);
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
textView.setVisibility(View.GONE);
}
}, 3000);
} else {
//go somewhere
}
}
});
}
}
简单XML
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="20dp"
tools:context="net.pixeledstudio.hidetextview.MainActivity">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Type something in the text view"
android:gravity="center"
android:id="@+id/textView"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Type something"
android:id="@+id/editText"
android:layout_marginTop="25dp"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Submit"
android:id="@+id/button"
android:layout_marginTop="25dp"/>
</LinearLayout>