我需要显示隐藏的TextView,然后重新隐藏它。
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/lectura"
android:layout_centerHorizontal="true"
android:layout_marginTop="104dp"
android:text=""
android:visibility="gone"
android:textAppearance="?android:attr/textAppearanceLarge" />
活动:
String codigo_leido = "";
EditText lectura;
String rut;
Boolean qr_code = false;
Boolean pdf_417 = false;
String title = "Eventrid";
TextView txtView;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.validacion_bluetooth);
txtView = (TextView)findViewById(R.id.textView1);
getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#3d3d3d")));
getSupportActionBar().setIcon(R.drawable.ticket_green);
getSupportActionBar().setTitle(Html.fromHtml("<font color=\"#FFFFFF\">" + title + "</font>"));
lectura = (EditText)findViewById(R.id.lectura);
lectura.setTextColor(Color.parseColor("#F3F1F1"));
lectura.setOnKeyListener(new OnKeyListener() {
public boolean onKey(View view, int keyCode, KeyEvent keyevent) {
txtView.setVisibility(View.VISIBLE);
txtView.setText("Validando...");
//If the keyevent is a key-down event on the "enter" button
if ((keyevent.getAction() == KeyEvent.ACTION_DOWN) && (keyCode == KeyEvent.KEYCODE_ENTER)) {
codigo_leido = lectura.getText().toString();
lectura.setText("");
database nueva = new database();
SessionManager sesion = new SessionManager();
try{
if (nueva.containRuN(codigo_leido)){
qr_code = true;
}
if(!qr_code){
rut = nueva.getRutFromPDF147(codigo_leido);
if(!(rut.equals("") || rut == null) && nueva.isRut(rut)){
pdf_417 = true;
}
}
}catch(Exception e){
}
sesion.setValue(ValidacionBlueTooth.this,"codigoLectura", codigo_leido);
txtView.setVisibility(View.INVISIBLE);
txtView.setText("");
Intent intent = new Intent(ValidacionBlueTooth.this,Validador.class);
startActivity(intent);
return true;
}
return false;
}
});
}
在运行EditText后,我想显示一个隐藏的TextView。使用此代码,它非常有用。但是当我再次回到之前显示的活动时。
尝试使用这些方法重新隐藏TextView但仍无法正常工作。按下后退按钮事件时,会再次出现TextView。
@Override
protected void onRestart() {
super.onRestart();
txtView = (TextView)findViewById(R.id.textView1);
txtView.setVisibility(View.INVISIBLE);
Log.i("ff", "On Restart .....");
}
@Override
protected void onDestroy() {
super.onDestroy();
txtView = (TextView)findViewById(R.id.textView1);
txtView.setVisibility(View.INVISIBLE);
Log.i("ff", "On Destroy .....");
}
修改
答案 0 :(得分:2)
尝试在OnResume方法中添加代码。也 添加布尔标志
private Boolean ifPressedEditText = false;
然后更改你的setOnKeyListener:
lectura.setOnKeyListener(new OnKeyListener() {
public boolean onKey (View view,int keyCode, KeyEvent keyevent){
txtView.setVisibility(View.VISIBLE);
txtView.setText("Validando...");
//add this line...
ifPressedEditText = true;
在onResume
中添加此代码 @Override
protected void onResume () {
super.onResume();
//do a check if the user previosly pressed the edittext
if (ifPressedEditText) {
txtView.setVisibility(View.INVISIBLE);
}else{
txtView.setVisibility(View.VISIBLE);
}
Log.i("ff", "On Resume .....");
}
}
答案 1 :(得分:0)
使用此代码可以很好地运行。但是当我回到以前 活动再次显示。
文档说:
http://developer.android.com/guide/components/activities.html#SavingActivityState
管理
Activity Lifecycle
的简介简要提及 当某项活动暂停或停止时,该活动的状态 保留。这是真的,因为Activity
对象仍然存在 内存暂停或停止 - 有关其成员的所有信息 并且 当前状态仍然存在 。因此, 用户所做的任何更改 活动中 保留,以便活动返回时 前景(当它“恢复” )时, 这些更改仍然存在 。
这就是重点:
但是,当系统销毁
Activity
以便 恢复时 内存 ,Activity
对象被销毁,因此系统无法简单 恢复状态完好无损。相反, 系统必须重新创建Activity
对象,如果用户导航回来 。然而,用户是 不知道系统破坏了活动并重新创建了它, 因此,可能期望活动完全如此。在这 情况,你可以确保有关的重要信息 通过实现额外的回调来保留活动状态 允许您保存有关您的状态的信息的方法 activity:onSaveInstanceState()。
这是有趣的部分。所以,当Activity
位于onResume
时,你应该这样做。
或者如果不起作用,请尝试使用onSaveInstanceState()
答案 2 :(得分:0)
您可以在TextView上轻松管理可见性。
txtView.setVisibility(View.INVISIBLE);
or
txtView.setVisibility(View.VISIBLE);
or
txtView.setVisibility(View.GONE);
您可以根据要求使用。