2013-10-08 70 views
0

我有一個按鈕,當我點擊它時,彈出窗口顯示其中包含4個按鈕。 根據用戶在彈出窗口中單擊的按鈕,彈出式觸發按鈕將自行更新。但是我面臨的問題是無法在下面的代碼中使用getId()。無法getId()在嵌套setOnClickListener

public void pressCell(View view) { 

    final ImageButton popup = (ImageButton) findViewById(view.getId()); 

    LayoutInflater layoutInflater = (LayoutInflater) getBaseContext() 
      .getSystemService(LAYOUT_INFLATER_SERVICE); 
    View popupView = layoutInflater.inflate(R.layout.popup, null); 
    final PopupWindow popupWindow = new PopupWindow(popupView, 
      LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
    popupWindow.setFocusable(true); 

    popupView.findViewById(popupView.getId()).setOnClickListener(
      new OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        switch (view.getId()) { 
        case R.id.button1: 
         popup.setImageResource(R.drawable.num1); 
        case R.id.button2: 
         popup.setImageResource(R.drawable.num2); 
        case R.id.button3: 
         popup.setImageResource(R.drawable.num3); 
        case R.id.button4: 
         popup.setImageResource(R.drawable.num4); 

        } 
        popupWindow.dismiss(); 
       } 

      }); 

    popupWindow.showAsDropDown(findViewById(view.getId()), -120, -2 
      * findViewById(view.getId()).getHeight()); 

} 

pressCell是觸發按鈕的onclick功能:

<ImageButton 
      android:id="@+id/cell1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:onClick="pressCell" 
      android:src="@drawable/num3" /> 

誰能告訴我什麼是這裏的問題?謝謝。

+0

使用popup.setOnClickListener爲多個視圖設置onClickLinstener,並在切換案例中添加中斷 –

+0

使用setOnClickListener和使用android:onclick是否有區別?由於我有很多觸發按鈕,所以我真的不想在每個按鈕上設置Listener。 – hakunami

回答

0

For get ImageButton's reference should be use;

ImageButton imageButton = (ImageButton)popupView.findViewById(R.id.cell1); 

在您的代碼setOnClickLİstener方法中,您將獲得popupView引用;

popupView.findViewById(popupView.getId()).setOnClickListener(
     new OnClickListener() { 
      @Override 
      public void onClick(View view) { // clicked view popupView. 
       switch (view.getId()) { 
       case R.id.button1: 
        popup.setImageResource(R.drawable.num1); 
       case R.id.button2: 
        popup.setImageResource(R.drawable.num2); 
       case R.id.button3: 
        popup.setImageResource(R.drawable.num3); 
       case R.id.button4: 
        popup.setImageResource(R.drawable.num4); 

       } 
       popupWindow.dismiss(); 
      } 

     }); 
+0

我選擇android:onClick的原因是我有很多這些觸發按鈕。我不想在他們每個人身上設置lisenter。如果我像你說的那樣做,我應該找到cell1到celln,它的很多工作。實際上,這部分運作良好。問題出現在這一行:popupView.findViewById(popupView.getId())。setOnClickListener – hakunami

0

在設置onClickListener,你這樣做:

popupView.findViewById(popupView.getId()).setOnClickListener 

你不應該傳遞view.getId到findViewById方法呢?

+0

因爲我認爲我應該從當前彈出窗口視圖獲取Id,但與包含觸發按鈕的視圖不一樣。對? – hakunami

+0

我也嘗試過view.getId()。它不適合我。 – hakunami