1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

setOnTouchListener

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von mitch_HD2, 18.01.2012.

  1. mitch_HD2, 18.01.2012 #1
    mitch_HD2

    mitch_HD2 Threadstarter Erfahrener Benutzer

    Beiträge:
    150
    Erhaltene Danke:
    1
    Registriert seit:
    30.10.2011
    Ich wieder^^
    ich brauch mal eine Starthilfe ich komm irgendwie nicht drauf

    habe 16 buttons.. die dann einzelt auf ontouch regieren

    für einen hab ich nun
    Code:
    public boolean onTouch(View v, MotionEvent event) {
    		int merker =1;
    		byte[] buf = null;
    		adress = (EditText) this.findViewById(R.id.IP);  
    	    ip = adress.getText().toString(); 	//edittbox in string
    	        		    
    	    if(merker==1){
    	    try {
            	InetAddress serverAddr = InetAddress.getByName(ip); //die IP vom editttext wird in einer Internetadresse umgewandelt 
    			DatagramSocket socket = new DatagramSocket();
    			
    				if(event.getAction()==MotionEvent.ACTION_DOWN)
    					{
    					buf = (K1).getBytes();
    					btn1.setChecked(true);
    					}
    				if(event.getAction()==MotionEvent.ACTION_UP)
    					{
    					buf = (K1).getBytes();
    					}
    				
    				DatagramPacket packet = new DatagramPacket(buf, buf.length,	serverAddr, Port);
    				socket.send(packet);
    				
    			} 
    	    catch (Exception e) 
    	    {
    				AlertDialog.Builder alert = new AlertDialog.Builder(this);//alert ausgeben show nicht vergessen;)
    	    		alert.setTitle("Fehler");// überschrift des buttons
    	    		alert.setMessage("Verbindungsfehler");//Text des Buttons
    	    		alert.setPositiveButton("OK", null);//Position des OK Buttons
    	    		alert.show();//zeigt alert an
    			}     	
    			}
    			
    		merker = 0;
    		return false;
    	}
            
    	}
    aber wie mach ich das nun für 16?


    und noch eine frage

    Code:
     public void onCreate(Bundle icicle) {
            super.onCreate(icicle);	
            setContentView(R.layout.main);
            
            btn1 = (ToggleButton) findViewById(R.id.S1);	
            btn1.setOnTouchListener(this);
            btn1.setOnTouchListener(this); 
            
            btn2 = (ToggleButton) findViewById(R.id.S2);	
            btn2.setOnClickListener(this);
            btn2.setOnTouchListener(this); 
           
            btn3 = (ToggleButton) findViewById(R.id.S3);	
            btn3.setOnClickListener(this);
            btn3.setOnTouchListener(this);
            
            btn4 = (ToggleButton) findViewById(R.id.S4);	
            btn4.setOnClickListener(this);
            btn4.setOnTouchListener(this); 
            
            btn5 = (ToggleButton) findViewById(R.id.S5);	
            btn5.setOnClickListener(this);
            btn5.setOnTouchListener(this); 
    ...............
    

    wie kann ich das ganze in eine for schleife fassen?

    danke
     
  2. Tom299, 18.01.2012 #2
    Tom299

    Tom299 Android-Experte

    Beiträge:
    602
    Erhaltene Danke:
    120
    Registriert seit:
    31.08.2011
    Ich würde die Buttons nicht ins XML legen sondern gleich dynamisch erzeugen und in ein Array oder eine ArrayListe legen, dann kannst du auch mit einer Schleife durchlaufen.

    Außerdem bekommt ein Button (wenn ich mich jetzt nicht ganz irre) einen OnClick-Listener und keinen OnTouch-Listener ;-)
     
  3. mitch_HD2, 18.01.2012 #3
    mitch_HD2

    mitch_HD2 Threadstarter Erfahrener Benutzer

    Beiträge:
    150
    Erhaltene Danke:
    1
    Registriert seit:
    30.10.2011
    ja ich weiß...
    aber ich benutze den ontouch damit der den befehl solange schickt solange der button gedrückt ist
     
  4. the_alien, 18.01.2012 #4
    the_alien

    the_alien Android-Lexikon

    Beiträge:
    1,559
    Erhaltene Danke:
    184
    Registriert seit:
    04.05.2009
    Code:
    private static final int[] myButtonIds = { R.id.button1, R.id.button2, R.id.button3 }
    
    (...)
    
    for(int id : myButtonIds) {
      Button btn = (Button)findViewById(id);
    
    (...)
    
    public boolean onTouch(View v, MotionEvent event) {
       switch(v.getId) {
       case R.id.button1:
          (...)
    
     
  5. mitch_HD2, 18.01.2012 #5
    mitch_HD2

    mitch_HD2 Threadstarter Erfahrener Benutzer

    Beiträge:
    150
    Erhaltene Danke:
    1
    Registriert seit:
    30.10.2011
    das sieht schon besser aus:) aber
    Code:
    Button btn = (Button)findViewById(id);
    der muss doch auch btn1, btn2, btn3 usw. haben..
    so schreibt der alles in btn
     
  6. the_alien, 18.01.2012 #6
    the_alien

    the_alien Android-Lexikon

    Beiträge:
    1,559
    Erhaltene Danke:
    184
    Registriert seit:
    04.05.2009
    Klar, aber btn ist bei jedem Schleifendurchlauf ein anderer ;)
     
  7. mitch_HD2, 18.01.2012 #7
    mitch_HD2

    mitch_HD2 Threadstarter Erfahrener Benutzer

    Beiträge:
    150
    Erhaltene Danke:
    1
    Registriert seit:
    30.10.2011
    aber woher weißt der onTouch denn dann welchen der benutzen soll?
     
  8. the_alien, 18.01.2012 #8
    the_alien

    the_alien Android-Lexikon

    Beiträge:
    1,559
    Erhaltene Danke:
    184
    Registriert seit:
    04.05.2009
    Öhm was?
     
  9. mitch_HD2, 18.01.2012 #9
    mitch_HD2

    mitch_HD2 Threadstarter Erfahrener Benutzer

    Beiträge:
    150
    Erhaltene Danke:
    1
    Registriert seit:
    30.10.2011
    ich habe doch 16buttons

    und der onTouchlistener muss doch jetzt auch wissen welches button gedrückt wird!?
     
  10. Tom299, 18.01.2012 #10
    Tom299

    Tom299 Android-Experte

    Beiträge:
    602
    Erhaltene Danke:
    120
    Registriert seit:
    31.08.2011
    das steht doch oben im switch ...
     
  11. mitch_HD2, 19.01.2012 #11
    mitch_HD2

    mitch_HD2 Threadstarter Erfahrener Benutzer

    Beiträge:
    150
    Erhaltene Danke:
    1
    Registriert seit:
    30.10.2011
    ja danke:D hab das überlesen^^

    aber leider klappt es immernoch nicht.. .es kommt zwar nicht zum absturz aber er tut es nicht....

    habe es zum test mit der ausgabe einer textview gemacht
    Code:
        public void onCreate(Bundle icicle) {
            super.onCreate(icicle);	
            setContentView(R.layout.main);
            
            TW1 = (TextView) this.findViewById(R.id.TW);
            TW1.setText("test") ;
            btn = (ToggleButton)findViewById(R.id.S1);
            btn1 = (ToggleButton)findViewById(R.id.S2);
            btn.setOnTouchListener(this);
            btn1.setOnTouchListener(this);
            for(int id:myButtonIds) {
    	  		  btn = (ToggleButton)findViewById(id);
    	    	}      
        } 
        
        public void onClick(View v) {	
        }
    
    	public boolean onTouch(View v, MotionEvent event) {
    	
    	adress = (EditText) this.findViewById(R.id.IP);  
    	ip = adress.getText().toString(); 	//edittbox in string
    	    
    		switch(v.getId()) 
    	    {
    	    case R.id.S1: TW1.setText("test1"); break;
    	    case R.id.S2: TW1.setText("test2"); break;
    	    }
    
    
     
  12. Tom299, 19.01.2012 #12
    Tom299

    Tom299 Android-Experte

    Beiträge:
    602
    Erhaltene Danke:
    120
    Registriert seit:
    31.08.2011
    hast du den buttons auch alle eine ID im XML gegeben?
     
  13. mitch_HD2, 19.01.2012 #13
    mitch_HD2

    mitch_HD2 Threadstarter Erfahrener Benutzer

    Beiträge:
    150
    Erhaltene Danke:
    1
    Registriert seit:
    30.10.2011
    jap hab ich... S1 -S16
     
  14. mitch_HD2, 19.01.2012 #14
    mitch_HD2

    mitch_HD2 Threadstarter Erfahrener Benutzer

    Beiträge:
    150
    Erhaltene Danke:
    1
    Registriert seit:
    30.10.2011
    wobei es eigentlich so aussieht.. also die zeilen vor der for schleife sind kommentiert

    Code:
    private static final int[] myButtonIds = {R.id.S1, R.id.S2, R.id.S3, R.id.S4, R.id.S5 ,R.id.S6,R.id.S7,R.id.S8 ,R.id.S9 ,R.id.S10,R.id.S11,R.id.S12,R.id.S13,R.id.S14,R.id.S15,R.id.S16 };
    
    ......
    ......
    
    public void onCreate(Bundle icicle) {
            super.onCreate(icicle);	
            setContentView(R.layout.main);
            
            TW1 = (TextView) this.findViewById(R.id.TW);
            TW1.setText("test") ;
            //btn = (ToggleButton)findViewById(R.id.S1);
            //btn1 = (ToggleButton)findViewById(R.id.S2);
            //btn.setOnTouchListener(this);
            //btn1.setOnTouchListener(this);
            for(int id:myButtonIds) {
    	  		  btn = (ToggleButton)findViewById(id);
    	  		  btn.setOnTouchListener(this);
    	    	}
            
    
        } 
        
        public void onClick(View v) {	
        }
    
    	public boolean onTouch(View v, MotionEvent event) {
    	
    		adress = (EditText) this.findViewById(R.id.IP);  
    	    ip = adress.getText().toString(); 	//edittbox in string
    	    
    		switch(v.getId()) 
    	    {
    	    case R.id.S1: TW1.setText("test1"); break;
    	    case R.id.S2: TW1.setText("test2"); break;
    	    }
    	
    	   
    		return false;
    	}
     
  15. the_alien, 19.01.2012 #15
    the_alien

    the_alien Android-Lexikon

    Beiträge:
    1,559
    Erhaltene Danke:
    184
    Registriert seit:
    04.05.2009
    edit: Oh, verlesen...
     
  16. Tom299, 19.01.2012 #16
    Tom299

    Tom299 Android-Experte

    Beiträge:
    602
    Erhaltene Danke:
    120
    Registriert seit:
    31.08.2011
    im switch fragst du aber die id der view ab -> button.getID(), was aber nichts mit der R.id.S1 zu tun hat, die du dir im Array merkst.
     
  17. the_alien, 19.01.2012 #17
    the_alien

    the_alien Android-Lexikon

    Beiträge:
    1,559
    Erhaltene Danke:
    184
    Registriert seit:
    04.05.2009
    Doch hat sie
     
  18. mitch_HD2, 19.01.2012 #18
    mitch_HD2

    mitch_HD2 Threadstarter Erfahrener Benutzer

    Beiträge:
    150
    Erhaltene Danke:
    1
    Registriert seit:
    30.10.2011
    Ich bin das Gegenteil von SIE:D:D:D
     
  19. the_alien, 19.01.2012 #19
    the_alien

    the_alien Android-Lexikon

    Beiträge:
    1,559
    Erhaltene Danke:
    184
    Registriert seit:
    04.05.2009
    Sigh...
     
  20. Tom299, 19.01.2012 #20
    Tom299

    Tom299 Android-Experte

    Beiträge:
    602
    Erhaltene Danke:
    120
    Registriert seit:
    31.08.2011
    ups ja, da hab ich mich vertan, werd schon ganz wirr hier ;-)
     

Diese Seite empfehlen