2014-02-11 3 views
2

У меня есть два вида деятельности; первая активность начинает вторую, а некоторые данные передаются через намерение.Создание TextView видимо во время выполнения в java (Android)

Intent i = new Intent(this,BActivity.class); 
i.putExtra("identify", "c2f"); 
startActivityForResult(i, 1); 

Во второй деятельности, я хочу сделать несколько TextViews/EditTexts видимого (которые изначально установлены на невидимый) на основе информации, переданной от первой деятельности.

Вот код для этого:

tv1 = (TextView)findViewById(R.id.textView2); 
tv2 = (TextView)findViewById(R.id.textView3); 
et1 = (EditText)findViewById(R.id.editText1); 
et2 = (EditText)findViewById(R.id.editText2); 
button = (Button)findViewById(R.id.send_result); 

Bundle extras = getIntent().getExtras(); 
String identifier = extras.getString("identify"); 

if(identifier == "c2f") 
{ 
    tv1.setVisibility(0); 
    tv1.setText("Celcius"); 
    et1.setVisibility(0);  
} 

else if(identifier == "f2c") 
{ 
    tv1.setVisibility(0); 
    tv1.setText("Fahrenheit"); 
    et1.setVisibility(0); 
} 

else if(identifier == "currency") 
{ 
    tv1.setVisibility(0); 
    tv1.setText("Amount"); 
    tv2.setVisibility(0); 
    tv2.setText("Conv. Rate"); 
    et1.setVisibility(0); 
    et2.setVisibility(0); 
} 

Теперь, когда начинается вторая активность, ни один из этих TextViews или EditTexts не похоже, чтобы получить видимый!
Идентификатор (строка) содержит правильное значение, переданное из первого действия, и оно даже переходит в условия if, но не делает видимым вид.
Я делаю какую-либо ошибку, пытаясь сделать эти взгляды видимыми?

ответ

5

Используйте .equals вместо == для сравнения строк. Вы также можете использовать переменную после строки с кавычками, чтобы избежать nullpointer. И вы можете использовать TextView.VISIBLE, это постоянная, чтобы она была видимой.

if("c2f".equals(identifier)) 
    { 
     tv1.setVisibility(TextView.VISIBLE); 
     tv1.setText("Celcius"); 
     et1.setVisibility(TextView.VISIBLE);  
    } 
+0

Вау ... это сработало: Вы можете объяснить, почему '==' там не работало? –

+0

TextView.VISIBLE имеет постоянное значение = 0, поэтому это должно быть проблемой. Хотя правильно использовать именованные константы вместо магических чисел. Сравнение объектов string с == - проблема здесь. – Michal

+2

Вы можете взглянуть на это сообщение о сравнении строк: http://stackoverflow.com/questions/767372/java-string-equals-versus – Giacomoni

2

Для этого используйте константы View.

your_view.setVisibility(View.VISIBLE); 

Это сделает ваш View видимым.

your_view.setVisibility(View.INVISIBLE); 

Это сделает его невидимым, но все еще с макетом видимой (в основном, пространство, в котором она идет остается нетронутым)

your_view.setVisibility(View.GONE); 

Это сделает ваш View исчезнуть, как это никогда не существовало!

+0

уже пробовал .. все еще не делает их видимыми. –

2

Как указано giacomoni, используйте equals для сравнения String. Вот ссылка, чтобы объяснить, почему. http://javarevisited.blogspot.in/2012/03/how-to-compare-two-string-in-java.html

Кроме того, попробуйте использовать стандартные View.VISIBLE и т. Д. Для отображения и скрытия представлений. Они гораздо проще в использовании и понимании. Счастливое кодирование. :)

Смежные вопросы