2011-04-30 124 views
1

我想在連接到服務器時顯示圖像(即正在開發SIP應用程序)。 我做這個(用一個TextView和圖像創建的XML文件[connected.xml]),但有一個FC:根據指令更改用戶界面

public void onRegistrationDone(String localProfileUri, long expiryTime) { 
         updateStatus("Registered to server."); 
         Log.d("SUCCEED","Registration DONE"); 
         setContentView(R.layout.connected); 
         } 

我想,然後連接或斷開連接時,添加圖像... 我怎麼解決這個問題 ? 非常感謝。

編輯: XML:

<?xml version="1.0" encoding="UTF-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" android:layout_height="fill_parent"> 

<TextView 
    android:id="@+id/sipLabel" 
    android:textSize="20sp" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"/> 

<ViewFlipper 
    android:id="@+id/flipper" 
    android:layout_width="fill_parent" android:layout_height="fill_parent"> 
    <RelativeLayout android:layout_width="fill_parent" 
     android:layout_height="fill_parent"> 


    <ImageView android:id="@+id/disconnected" android:src="@drawable/disconnected" android:layout_below="@id/sipLabel" 
    android:layout_width="wrap_content" 
     android:layout_height="wrap_content" android:layout_weight="0.35" android:gravity="center" 
    /> 
    </RelativeLayout> 

    <RelativeLayout android:layout_width="fill_parent" 
     android:layout_height="fill_parent"> 


    <ImageView android:id="@+id/connected" android:src="@drawable/connected" android:layout_below="@id/sipLabel" 
    android:layout_width="wrap_content" 
     android:layout_height="wrap_content" android:layout_weight="0.35" android:gravity="center" 
    /> 
    </RelativeLayout> 

</ViewFlipper> 
</RelativeLayout> 

回答

1

你不應該叫setContentView多次在一個活動中,除非你是100%肯定,你已經在它清理一切。
即使這樣,您的用戶可能會發現奇怪的,即按下後退按鈕,他們不會看到他們在等待什麼,儘管開始了相同的活動。

所以,你應該相當想想

  • 改變你的看法知名度 顯示/隱藏的不同部分,或
  • 更優雅,更容易的解決方案: 使用ViewFlipper

更新1
這裏是ViewFlipper的樣本用法:
把這些線在你的佈局XML:

<ViewFlipper android:id="@+id/flipper" 
    android:layout_width="fill_parent" android:layout_height="fill_parent"> 
    <RelativeLayout android:layout_width="fill_parent" 
     android:layout_height="fill_parent"> 
     <!-- your first view comes here --> 
    </RelativeLayout> 
    <RelativeLayout android:layout_width="fill_parent" 
     android:layout_height="fill_parent"> 
     <!-- your second view comes here --> 
    </RelativeLayout> 
</ViewFlipper> 

,並在Java代碼中,當你需要改變你寫:

flipper = (ViewFlipper)findViewById(R.id.flipper); 
flipper.showNext(); 

額外的: 可以調用showNextshowPrevious之前動畫的翻轉,所有你需要做的就是設置你flipperinout動畫:

Animation inAnimation = new TranslateAnimation(
     Animation.RELATIVE_TO_PARENT, +1.0f, 
     Animation.RELATIVE_TO_PARENT, 0.0f, 
     Animation.RELATIVE_TO_PARENT, 0.0f, 
     Animation.RELATIVE_TO_PARENT, 0.0f); 
inAnimation.setDuration(250); 
inAnimation.setInterpolator(new AccelerateInterpolator()); 

Animation outAnimation = new TranslateAnimation(
     Animation.RELATIVE_TO_PARENT, 0.0f, 
     Animation.RELATIVE_TO_PARENT, -1.0f, 
     Animation.RELATIVE_TO_PARENT, 0.0f, 
     Animation.RELATIVE_TO_PARENT, 0.0f); 
outAnimation.setDuration(250); 
outAnimation.setInterpolator(new AccelerateInterpolator()); 

flipper = (ViewFlipper)findViewById(R.id.flipper); 
flipper.setInAnimation(inAnimation); 
flipper.setOutAnimation(outAnimation); 
flipper.showNext(); 

更新2

樣本爲ViewFlipper與全球標題:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" android:layout_height="fill_parent"> 
    <TextView android:id="@+id/status_text" android:text="Status: " 
     android:layout_width="fill_parent" android:layout_height="wrap_content" /> 
    <ViewFlipper android:id="@+id/flipper" android:layout_below="@id/status_text" 
     android:layout_width="fill_parent" android:layout_height="fill_parent"> 
     <RelativeLayout android:layout_width="fill_parent" 
      android:layout_height="fill_parent"> 
      <!-- your first view comes here without the status TextView --> 
     </RelativeLayout> 
     <RelativeLayout android:layout_width="fill_parent" 
      android:layout_height="fill_parent"> 
      <!-- your second view comes here --> 
     </RelativeLayout> 
    </ViewFlipper> 
</RelativeLayout> 
+0

@rekaszeru:我真的很喜歡這個ViewFlipper!你有沒有請我可以遵循的指南?非常感謝你。 – androniennn 2011-04-30 14:57:06

+0

請查看我的更新以瞭解'ViewFlipper'的示例用法。 – rekaszeru 2011-04-30 15:17:07

+0

@rekaszeru:嗯,我只是可以感謝你這個真棒的答案。用這個評論編輯你的第二個相關佈局<! - 你的第二個視圖來到這裏 - >(第二個不是第一個;)).anyway,非常感謝你。 – androniennn 2011-04-30 15:22:49

0

可能是一個線程的問題:用戶界面的變化一定會發生的活動的主循環線程。看看http://developer.android.com/reference/android/os/Handler.html

  1. 爲該活動創建一個處理程序。
  2. 發送消息(http://developer.android.com/reference/android/os/Message.html)註冊完成。
  3. 在處理程序中,接收該消息並更改您的用戶界面。

讓我知道這是如何工作。

編輯:固定的消息鏈接

+0

但正如rekaszeru說,我無法更改用戶界面e活動...? – androniennn 2011-04-30 14:58:16