2014-02-11 62 views
2

我有兩個活動;第一個活動從第二個活動開始,其中一些數據通過意圖傳遞。在java中運行時顯示TextView(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而不是==來進行字符串比較。您也可以在帶引號的字符串之後使用該變量來避免空指針。你可以使用TextView.VISIBLE,它是一個常量,讓它可見。

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

哇......它的工作原理:你能解釋爲什麼'=='在那裏不起作用嗎? –

+0

TextView.VISIBLE具有常數值= 0,所以這應該不成問題。雖然使用命名常量而不是幻數是正確的。將字符串對象與==比較是一個問題。 – 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

已經嘗試..仍然沒有使他們可見。 –