2017-02-02 57 views
0

我正在使用數組添加一個自定義視圖。通過膨脹佈局並將這些元素添加到ViewGroup中,如圖中所示,數組元素被初始化。 當我設置onClickListener的方式,使點擊視圖的背景爲重音顏色它發生,但爲了使其相互排斥,以便一旦點擊了一個視圖,其他視圖的背景應該變得透明,因爲它們原來是我用過的下面的代碼但是當我點擊視圖時,我的應用程序停止響應。如果我的方法不正確請建議我以正確的方式獲得所需的結果。在android中添加自定義視圖的數組並設置onClickListener互斥

這應該發生:

enter image description here

這不應該發生:

enter image description here

if(noOfChild>1) { 
     for (j = 0; j < noOfChild; j++) { 
      LayoutInflater inflater = (LayoutInflater) getSystemService(getApplicationContext().LAYOUT_INFLATER_SERVICE); 
      childButton[j] = (inflater.inflate(R.layout.child_selection_button, null)); 
      childButton[j].setId(j); 
      children.addView(childButton[j], new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, 1.0f)); 
      childButton[j].setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        v.setBackgroundColor(ContextCompat.getColor(MainScreen.this, R.color.dimAccent)); 
        // for (int k =0;k<noOfChild;k++){ 
        //  while(k!=v.getId()){ 
        //   childButton[k].setBackgroundColor(ContextCompat.getColor(MainScreen.this, R.color.transparent)); 
        //  } 
        // } 
       } 
      }); 
     } 
    } 

回答

1

你可以保持一個局部變量,顯示最後選定項目的位置。然後在您的onClick()方法中執行開關位置和背景顏色:

private View lastSelected; 

//... rest of code ... 

//Inside for loop 
public void onClick(View v){ 
     if (lastSelected == null){ 
      lastSelected = v; 
      selectItem(lastSelected); 
     } 
     else 
     { 
     deselectItem(lastSelected); 
     lastSelected = v; 
     selectItem(lastSelected); 
     } 
} 

private void selectItem(View v){ 
    v.setBackgroundColor(ContextCompat.getColor(MainScreen.this,R.color.dimAcent)); 
} 

private void deselectItem(View v){ 
     v.setBackgroundColor(ContextCompat.getColor(MainScreen.this, R.color.transparent)); 
} 
相關問題