2011-11-18 50 views
2

在我的TableLayout上,一個TableRow有一個TextView,另一個有一個Spinner。當用戶選中一個複選框時,我想交換這兩個視圖的位置。微調需要移動到TextView的位置,TextView需要移動到微調的位置。Android:交換2個視圖的位置

動畫無關緊要。首選項是它會立即發生,但如果有必要,我可以使它成爲超快速的動畫。

我很驚訝我試圖找到解決這個問題的麻煩:/在類似的說明中,Android開發人員可以真正使用MSDN庫中的一些簡單示例。

謝謝!

回答

3

這是我最後使用交換意見代碼:

import android.widget.TableRow; 

TableRow trI = (TableRow) findViewById(R.id.tr_input_row); 
TableRow trO = (TableRow) findViewById(R.id.tr_output_row); 
View v1 = (View) findViewById(R.id.View1); 
View v2 = (View) findViewById(R.id.View2); 

if (isInput()) { 
    trO.removeView(v1); 
    trI.removeView(v2); 
    trO.addView(v2); 
    trI.addView(v1); 
} else { 
    trO.removeView(v2); 
    trI.removeView(v1); 
    trO.addView(v1); 
    trI.addView(v2); 
} 

在我的情況下,視圖位於TableLayout的兩個不同行中。我使用的是TableRow,因爲它是我想要交換的視圖的父類型。我認爲這可以更新爲目標視圖具有的任何父類型。

4

您可以嘗試刪除第一個TextView,然後使用addView將其添加回到線性佈局的末尾。

TextView tv = (TextView)layout.getChildAt(0); 
layout.removeView(tv); 
layout.addView(tv); 

這不是一個真正乾淨的代碼,但我的東西可能工作:)

+0

不錯。我在星期五離開工作之前就開始實施這個方法,但還沒有機會去測試它。我不認爲我同意這不是乾淨的代碼。這些Android表單比HTML表單更類似於HTML表單。在發佈這個問題之後,我想到了它應該更像HTML DOM,而不是作爲位於(x,y)位置畫布上的項目。要在HTML DOM中移動項目,您必須刪除並重新添加它們 – jwatts1980