写真集

Camera:Panasonic LUMIX DMC-LX3
Vine Linux と Ubuntu の設定方法など

Android アプリのボタンクリック処理 OnClickListener

2012-05-06 12:04:30 | Android
Android アプリのボタンクリックのイベントやハンドラのコールバック処理は、Activityのインナークラスにして、まとめておくと見やすいです。

source github


    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        btnLoginAlert = (Button)findViewById(R.id.btn_loginAlert);
        btnLoginAlert.setOnClickListener(new LoginAlert());
        etResponse = (EditText)findViewById(R.id.ed_response);
        nicoMesssage = new NicoMessage();
        nico = new NicoRequest(nicoMesssage);
    }

    class LoginAlert implements OnClickListener, Handler.Callback ,OnReceiveListener {
    	@Override
		public void onClick(View v) {
    		key();
    		//ログインボタンをdisableにする
        	btnLogin.setEnabled(false);
        	btnLoginAlert.setEnabled(false);
        	
    		final Handler handler = new Handler(this);
    		nicosocket = new NicoSocket(nicoMesssage);
    		nicosocket.setOnReceiveListener(this);
    		
    		new Thread (new Runnable(){
    			public void run() {
    				nico.loginAlert(email.getText().toString(),password.getText().toString());
    				nicosocket.connectCommentServer(nico.getAlertAddress(), nico.getAlertPort(), nico.getAlertThread());
    				Message message = handler.obtainMessage(R.id.btn_loginAlert);
    				handler.sendMessage(message);
    			}}).start();
		}
    	
    	@Override
		public boolean handleMessage(Message msg) {
    		if(nicosocket.isConnected()){
    			new Thread(nicosocket.getAlertSocketRun()).start();
    			btnLogin.setVisibility(View.GONE);
    			btnLoginAlert.setVisibility(View.GONE);
    		}else{
    			Toast.makeText(getApplicationContext(), "アラートログインに失敗しました", Toast.LENGTH_SHORT).show();
    			//ログインボタンをenableにする
    	    	btnLogin.setEnabled(true);
    	    	btnLoginAlert.setEnabled(true);
    		}
			return true;
		}
    	
		@Override
		public void onReceive(String receivedMessege) {
			etResponse.append(receivedMessege + "\n");
		}	
    }