2015-09-28 106 views
0

因此,我在這裏看到了幾個帖子,這些帖子暗示了獲取Android中任何子視圖的父視圖的id的最佳解決方案是之類的:Android - 獲取活動/片段中的父視圖的ID

View parent = (View)child.getParent(); 
int id = parent.getId(); 

不幸的是,這在我的情況下不起作用。我有一個自定義ViewGroup(擴展FrameLayout)與2個按鈕,一個textView和一個酒吧,需要按鈕點擊更新。

class WaveControl extends FrameLayout{ 
    Button minus; 
    Button plus; 
    ExpandingBar bar; //simple view that only draws a color(need for indication purposes) 
    int counter; 
    } 

擴展欄需要按鈕點擊動畫,我有方法,照顧在WaveControl內。我也有一個有五個WaveControls的片段,我需要在片段中實現一個onClickListener,以根據哪個WaveControl被點擊/更新來應用濾鏡。但即使我實現上述代碼,我得到不同的ID,即在:

WaveControl wc1; // (in xml id is field_1) 
WaveControl wc2; // (in xml if is field_2) 
WaveControl wc3; //... 
WaveControl wc4; //... 

wc1.minus.setOnclickListener(this); 
wc2.plus.setOnclickListener(this); 
.... //this for every button 

@Override 
public void OnClick(View v){ 
    View parent = (View)v.getParent(); 
    int id = parent.getId(); 
    Log.i(TAG, "view id: "+ id +" wc1 id: " + field1.getId()); 
    switch(v.getId()){ 
     case R.id.minus: 
      ... 
    } 
} 

輸出是:I/WaveFragment﹕ view id: -1 wc1 id: 2131624083 顯然,這不能成爲我當這是被點擊視圖的指標。 我已經想出了一個解決方法,爲每個waveControl字段創建幾個onClickListeners,但它看起來並不像完美的解決方案。 仍然存在這樣的問題:將ViewParent投射到視圖將不會獲得放置在片段中的視圖的實際ID。任何提示爲什麼發生這種情況將不勝感激。 謝謝

回答

0

而不是比較「ID」,比較「意見」可能會工作。 爲此,您應該初始化您將比較的視圖。 例如:

View minus = (View) wc1.findViewById(R.id.minus); //or wc1.minus 
switch(v){ 
     case minus: 
... 
} 

編輯: 在代碼中,你是一個視圖比較視圖的ID。我想比較這兩個id將解決你的問題。

@Override 
public void OnClick(View v){ 
    View parent = (View)v.getParent(); 
    int id = parent.getId(); 
    Log.i(TAG, "view id: "+ id +" wc1 id: " + field1.getId()); 
    switch(v.getId()){ 
     case wc1.minus.getId(): 
      ... 
     case wc1.plus.getId(): 
      ... 
     case wc2.minus.getId(): 
      ... 
     case wc2.plus.getId(): 
      ... 

    } 
} 
+0

我想我沒有正確地解釋它。我需要查看哪個按鈕的父級,因爲不同的waveControls會更改信號的不同部分。從這個意義上說,我可以很容易地區分正負,但我不能說出誰是父母。至少沒有一個onclicklistener。 – zelle

+0

@zelle我編輯了我的答案。 –

相關問題