显示和隐藏TextView

时间:2016-01-26 20:03:17

标签: android textview

我需要显示隐藏的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 .....");
}

修改

1

2

3 个答案:

答案 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);

您可以根据要求使用。