2012-02-10 90 views
3

我在某個時刻更改了我的Activity的ContentView。 (到View2)。 將其更改回View1後,偵聽器不再工作。 我已經嘗試將監聽器放在onResume()方法中。setContentView和Listeners

無論如何,使用setContentView()來顯示例如進度屏幕/請稍候,...(而asyncTask正在運行)。 或者你應該每個活動只有一個mainView? (並動態替換內容)。

//編輯:更具體: 我在尋找類似

LinearLayout item = (LinearLayout) findViewById(R.id.mainView); 
View child = getLayoutInflater().inflate(R.layout.progress, null); 
item.addView(child); 

但不是添加「progress.xml」,它應該刪除當前的佈局,只顯示「的進展。 XML」。 我需要一個「容器」並顯示/隱藏mainView /進度嗎? 但是,這似乎並沒有很合適的給我...

參見下面的代碼(剝離)

public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.view1); 

     button.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       doSomething(); 
      } 
     }); 
} 

setContentView(R.layout.view2); 
[...] 
setContentView(R.layout.view1); 

//Listener not more working 
+0

如何創建'按鈕'?你需要顯示更多的代碼。 – 2012-02-10 01:54:24

+1

我認爲你的方法在某些情況下是可以的(例如,view1是一個加載或啓動屏幕,view2是內容。處理這個問題的一種方法是將view1和view2的內容放在嵌套在FrameLayout下的同一個佈局文件中,從View.GONE到View.VISIBLE的可見性,必要時使用View#setVisibility()。 – nmr 2012-02-10 02:14:54

回答

1

謝謝大家,您的回覆。你讓我意識到,當我刪除或替換(使用setContentView())主視圖時,onClickListeners會迷路。我結束了,現在是這樣的:

的onCreate:

setContentView(R.layout.parse); 
LinearLayout container = (LinearLayout) findViewById(R.id.container); 
container.addView(getLayoutInflater().inflate(R.layout.dialog, null)); 
container.addView(getLayoutInflater().inflate(R.layout.progress, null)); 

onStartDoingSomething:

findViewById(R.id.dialog).setVisibility(View.INVISIBLE); 
findViewById(R.id.progress).setVisibility(View.VISIBLE); 

onEndDoingSomehting:

findViewById(R.id.dialog).setVisibility(View.VISIBLE); 
findViewById(R.id.progress).setVisibility(View.INVISIBLE); 

我可能會改變View.INVISIBLE到View.GONE,像nmr說,但由於我從來沒有使用View.GONE,我必須先檢查Android Doku;)

0

只能爲每個活動一個UI,你應該創建另一個活動,並在其onCreate方法設置的內容視圖

步驟:

  1. 創建活動
  2. 使用以下代碼來設置內容視圖:

    public void onCreate(Bundled savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.view2);

    }

  3. 定義活動在表現爲這樣的應用程序:

    公共無效的onCreate(捆綁savedInstanceState){ :

  4. 在第一活動創建的意圖super.onCreate(savedInstanceState); setContentView(R.layout.view1);按鈕按鈕=(按鈕)findViewById(R.id.button);

    button.setOnClickListener(新OnClickListener(){@Override 公共 無效的onClick(視圖v){ 意圖();} }); }

    空隙意圖(){

    意圖意圖=新意圖(); intent.setClass(Activity1.this,活性2。類); startActivity(intent);

    }

而且你去C:

+0

好吧,但不止一個UI正在工作......但似乎這是一個常見的事情,只能在onCreate方法中調用setContentView一次就是這樣,我不能參加兩個活動,在這裏沒有什麼意義.. – 2012-02-10 02:10:37

+0

更改活動並不麻煩,但如果它只是您想要的進度對話框,您可以創建進度對話框,看看這個參考veloper.android.com/reference/android/app/ProgressDialog.html – FabianCook 2012-02-10 02:14:37

+0

事情是,Activity_XY是三個Tabs之一,它按下按鈕後開始一個異步任務,調用Activity_XY的Progress-Handler方法,爲其提供一些信息(文本)。 – 2012-02-10 02:18:03

1

假設你用 'findViewById' 初始化 '按鈕',你需要做的每一個你做的setContentView時間(R.layout .view1);

+0

謝謝,你是對的,這就是我應該稱之爲聽衆粘合劑的點......但它不是很合適...... – 2012-02-10 02:11:51