setOnTouchListener

ok^^ aber was mach ich nun?:(
 
Warum nutzt du nicht onClick dafür? Könnte imho gut sein, dass das onTouch gar nicht ausgelöst wird.
 
als ich das für ein button gemacht habe ohne switch und getId() hat das wunderbar geklappt...

es muss allerdings ein onTouch sein da
-ich drücke.. er schickt Befehl "1"
-ich loslasse.. er schickt Befehl"2"

und er soll halt erst die "2" schicken wenn ich loslasse
 
Dann debugge mal rein welche View dort übergeben wird...
 
oder post mal deinen aktuellen code ... in den letzten beispielen hast du ja nicht zwischen down und up unterschieden
 
Code:
package com.example;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

import android.app.Activity;
import android.app.AlertDialog;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.ToggleButton;
import android.view.View.OnClickListener;

public class UDPActivity extends Activity implements OnTouchListener, OnClickListener{
	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 };
	
	String ip = "129.1.110.205";
	private static final int[] Key = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
	ToggleButton btn, btn1;
	int Port = 12301;
	EditText adress;
	byte[] buf = null;
	int K;
	TextView TW1 ;

	/** Called when the activity is first created. */
    
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);	
        setContentView(R.layout.main);
        
        TW1 = (TextView) this.findViewById(R.id.TW);
        TW1.setText("test") ;

        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: V_BUT1(v, event); break;
	    case R.id.S2: V_BUT2(v, event); break;
	    }
	
	   
		return false;
	}

	private void V_BUT2(View v, MotionEvent event, int K) {
		{
			int merker =1;
			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 = ("K="+K+" ").getBytes();
					btn.setChecked(true);
					}
				if(event.getAction()==MotionEvent.ACTION_UP)
					{
					buf = ("k="+K+" ").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;
			}
		
	}


V_BUT1 und V_BUT2 sind bisher noch gleich
 
Und hier noch mal der alte code ohne switch etc.

der Funktionier

Code:
package com.example;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

import android.app.Activity;
import android.app.AlertDialog;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.Button;
import android.widget.EditText;
import android.view.View.OnClickListener;

public class UDPActivity extends Activity implements OnTouchListener, OnClickListener{
	String ip = "129.1.110.205";
	String Key = "15";
	int Port = 12301;
	EditText keycode;
	EditText adress;
	
	/** Called when the activity is first created. */
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);	
        setContentView(R.layout.main);
        Button AN1 = (Button) findViewById(R.id.AN);
        AN1.setOnClickListener(this);
        AN1.setOnTouchListener(this);
    } 
    
    public void onClick(View v) {
		// TODO Auto-generated method stu		
	}

	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
	        	
	    keycode = (EditText) findViewById(R.id.KEY);
	    Key = keycode.getText().toString();
	    
	    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 = ("K="+Key+" ").getBytes();
					}
				if(event.getAction()==MotionEvent.ACTION_UP)
					{
					buf = ("k="+Key+" ").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;
	}
        
	}
 
hmm wie kann das überhaupt compilieren? du rufst V_BUT2(v, event) auf, aber die methode ist mit 3 parametern definiert -> private void V_BUT2(View v, MotionEvent event, int K)

hast du evtl. noch eine alte Methode mit gleichem namen und nur 2 parametern drin, die du versehentlich aufrufst?
 
öhmmm wofür war den das K nochmal...

ich habe halt noch die V_BUT1 aber die ist genauso...

ich habe das K für irgendwas gebraucht...
 
Wenn du doch eh alles wieder in einer eigenen Methode machst, dann häng nen neuen Listener an jeden Button.
 
also nun läuft es

aber nun steh ich vor dem nächsten problem

ich hab beim dem togglebutton in der xml ein text hinterlegt

android:text="1"

nun will ich mit getText(); mir den text ausgeben lassen

er nimmt aber nicht meinen text sondern den
android:textOff bzw. android:textOn

HTML:
http://developer.android.com/reference/android/widget/ToggleButton.html

auch wenn ich die Attribute aus der xml lösche zeigt der trotzdem noch Off bzw On an
 
du hast doch die doc verlinkt, da stehts doch drin:

Code:
Public Methods

public CharSequence getTextOff ()

Since: API Level 1
Returns the text for when the button is not in the checked state.
Returns

The text.
public CharSequence getTextOn ()

Since: API Level 1
Returns the text for when the button is in the checked state.
Returns

The text.

also mußte auch:
Code:
public void setTextOff (CharSequence textOff)

Since: API Level 1
Sets the text for when the button is not in the checked state.
Parameters

textOff	The text.
public void setTextOn (CharSequence textOn)

Since: API Level 1
Sets the text for when the button is in the checked state.
Parameters

textOn	The text.

nutzen ;-)
 
Ups:D ok danke^^
 

Ähnliche Themen

P
Antworten
1
Aufrufe
596
swordi
S
K
  • krackmoe
Antworten
3
Aufrufe
2.340
Unicate
U
Bobert
Antworten
0
Aufrufe
867
Bobert
Bobert
Zurück
Oben Unten