2014-03-31 58 views
0

當用戶單擊時,我正在更改背景按鈕。onClickListener獲取外部對象

但我需要改變的2個按鈕的背景:當我在btnSim單擊我需要改變btnSim背景和btnNao背景:

holder.btnNao.setOnClickListener(new OnClickListener() { 

    @Override 
    public void onClick(View arg0) { 

     ImageButton botao = (ImageButton) arg0; 

     if (botao.getBackground().getConstantState()==getResources().getDrawable(R.drawable.rdb_off).getConstantState()) 
     { 
      botao.setBackgroundResource(R.drawable.rdb_on); 
     } 
     else 
      botao.setBackgroundResource(R.drawable.rdb_off); 
    } 

}); 


holder.btnSim.setOnClickListener(new OnClickListener() { 

    @Override 
    public void onClick(View arg0) { 

     ImageButton botaoSim = (ImageButton) arg0; 

     if (botaoSim.getBackground().getConstantState()==getResources().getDrawable(R.drawable.rdb_off).getConstantState()) 
     { 
      botaoSim.setBackgroundResource(R.drawable.rdb_on); 
     } 
     else 
      botaoSim.setBackgroundResource(R.drawable.rdb_off); 

    } 

}); 

編輯更多的我的代碼:http://pastebin.com/Jf1ZDek5

+0

和確切的問題是什麼,你的面? – Salah

+0

我有2個onClickListeners,但我需要在相同的clickListener中更改btnSim和btnNao – Ladessa

+0

您不能將嵌套函數之外的變量聲明移動,以便您可以在兩者中使用它們嗎? –

回答

0

注意if {}中的變化。

Button botao = (Button) findViewById(R.id.button_1); 
Button botaoSim = (Button) findViewById(r.id.button_2); 
holder.btnNao.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View arg0) { 

        ImageButton botao = (ImageButton) arg0; 

        if (botao.getBackground().getConstantState()==getResources().getDrawable(R.drawable.rdb_off).getConstantState()) 
        { 
         botao.setBackgroundResource(R.drawable.rdb_on); 
         botaoSim.setBackgroundResource(R.drawable.rdb_on); 

        } 
        else 
         botao.setBackgroundResource(R.drawable.rdb_off); 
       } 

      }); 


      holder.btnSim.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View arg0) { 

        ImageButton botaoSim = (ImageButton) arg0; 

        if (botaoSim.getBackground().getConstantState()==getResources().getDrawable(R.drawable.rdb_off).getConstantState()) 
        { 
         botao.setBackgroundResource(R.drawable.rdb_on); 
         botaoSim.setBackgroundResource(R.drawable.rdb_on); 
        } 
        else 
         botaoSim.setBackgroundResource(R.drawable.rdb_off); 

       } 

      }); 

新的代碼片段

public class MainActivity extends Activity implements OnClickListener { 


@Override 
public void onClick(View v) { 
    if (botaoSim.getBackground().getConstantState()==getResources().getDrawable(R.drawable.rdb_off).getConstantState()) 
        { 
         botao.setBackgroundResource(R.drawable.rdb_on); 
         botaoSim.setBackgroundResource(R.drawable.rdb_on); 
        } 
        else 
         botaoSim.setBackgroundResource(R.drawable.rdb_off); 
} 


private class CustomAdapter extends BaseAdapter 
{ 
    /** All your implementations as in pastebin */ 
    ... 
    public View getView(int position, View convertView, ViewGroup parent) { 
        ViewHolder holder = null; 
        if (convertView == null) { 
          holder = new ViewHolder(); 
          /* Add reference to holder.btnNao and holder.btnSim */ 
          holder.btnNao.setOnClickListener(MainActivity.this); 
          holder.btnSim.setOnClickListener(MainActivity.this); 
          /* Your remaining code */ 
    } 
} 

通知我已經customAdapter在MainActivity私有內部類製成。

+0

我已經有holder.btnSim和holder.btnNao clickListener外面,但我已經試過'別人 \t \t \t \t \t \t \t \t botaoSim.setBackgroundResource(R.drawable.rdb_off); \t \t \t \t \t \t \t holder.btnNao.setBackgroundResource(R.drawable.rdb_on); \t \t \t \t \t \t \t \t \t}'但是我得到錯誤說,持有人必須是最終 – Ladessa

+0

你能告訴您更多的代碼?從使用持有者的角度來看,它看起來像是在某個適配器的getView()中實現onClick。代碼的更多啓示可以幫助其他人更好地幫助您。 – user3388324

+0

http://pastebin.com/Jf1ZDek5 – Ladessa

0

您可以實現onClickListener,因爲這兩個按鍵的一部分做同樣的事情:

例子:

public class MainActivity extends Activity implements OnClickListener { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     botao.setOnClickListener(this); 
     botaoSim.setOnClickListener(this); 
    } 

    @Override 
    public void onClick(View v) { 
     // TODO Auto-generated method stub 
     //put your code here. 
    } 
}