2012-06-08 4 views
5

Ich weiß, das ist einfach, aber ich bin einfach nicht in der Lage, es zu debuggen.On click Listener zweimal angerufen

Ich erstelle dynamisch 3 LinearLayouts und füge sie zu einer Bildlaufansicht hinzu. Ich füge eine Schaltfläche "ins" an die Spitze von 3 linearlayout.

Das Problem ist, dass beim Klicken auf die Schaltfläche ins 3-mal aufgerufen wird. Code:

package com.integrated.mpr; 

import android.app.Activity; 
import android.app.Dialog; 
import android.util.Log; 
import android.util.TypedValue; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.ViewGroup.LayoutParams; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.LinearLayout; 
import android.widget.ScrollView; 
import android.widget.TextView; 


public class Page1 extends Activity implements OnClickListener{ 

    static int pos = new Choose().n; 
    static String partname; 

    int i; 
    int[][] id = new int[pos][5]; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     int p =0; 
     for(int i =0;i<3;i++){ 
      for(int j =0;j<5;j++){ 

       p++; 
      } 
     } 


     ScrollView sv = new ScrollView(this); 

     LinearLayout ll = new LinearLayout(this); 
     ll.setOrientation(LinearLayout.VERTICAL); 
     int resid = getResources().getIdentifier("background", "drawable", getPackageName()); 
     ll.setBackgroundResource(resid); 

     Button ins = new Button(this); 
     ins.setText("Instructions"); 
     ins.setOnClickListener(this); 
     ins.setId(5000); 

     ll.addView(ins); 

     for(i =0;i<3;i++){ 


      LinearLayout llay = new LinearLayout(this); 
      llay.setOrientation(LinearLayout.VERTICAL); 

      TextView tv = new TextView(this); 
      tv.setText("enter the " +(i+1)+" position name"); 


      EditText et = new EditText(this); 
      et.setId(id[i][0]); 

      Button starta = new Button(this); 
      starta.setText("Record 1"); 
      starta.setId(id[i][1]); 
      starta.setOnClickListener(this); 

      Button startb = new Button(this); 
      startb.setText("Record 2"); 
      startb.setId(id[i][2]); 
      startb.setOnClickListener(this); 


      Button startc = new Button(this); 
      startc.setText("Record 3"); 
      startc.setId(id[i][3]); 
      startc.setOnClickListener(this); 


      Button stop = new Button(this); 
      stop.setText("Submit"); 
      stop.setId(id[i][4]); 
      stop.setOnClickListener(this); 

      TextView tv1 = new TextView(this); 
      tv1.setVisibility(llay.INVISIBLE); 

      llay.addView(tv); 
      llay.addView(et); 
      llay.addView(starta); 
      llay.addView(startb); 
      llay.addView(startc); 
      llay.addView(stop); 
      llay.addView(tv1); 
      ll.addView(llay); 

     } 
     Button bcon = new Button(this); 
     bcon.setText("Continue"); 
     bcon.setId(10000); 
     bcon.setOnClickListener(this); 
     ll.addView(bcon); 


     sv.addView(ll); 

     this.setContentView(sv); 

    } 

    @Override 
    public void onClick(View v) { 
     // TODO Auto-generated method stub 

      if(v.getId()==5000){  
      Log.d("ins", "called"); 
      Context mContext = Page1.this; 
      Dialog dialog = new Dialog(mContext); 
      dialog.setTitle("Instructions"); 
      dialog.setContentView(R.layout.instructiondialog); 
      dialog.show(); 


      } 

     } 
    } 






} 

Ich weiß auf jeden Fall, es gibt ein Problem in dem Code von OnCreate aber was es ist? Hilfe bitte

Kann jemand weiter erklären, wie man den Knopf ausgerichtet auf der rechten Seite des Bildschirms, das ist, wie man seine Layout Schwerkraft setzt?

+1

nenne ich denke, es ist etwas, das es im Inneren zu tun hat mit erklärt die for-Schleife ... – GAMA

+0

Genau, aber können Sie ein bisschen genauer sein –

+0

Wie GAMA sagt, wenn Sie dreimal durchlaufen, und definieren Sie einen onclick Listener in jeder Schleife, erhalten Sie drei onclicklisteners, die alle wann aufgerufen werden Der Benutzer drückt den Knopf. – Christine

Antwort

1

Ich bin mir nicht sicher, was genau Sie erreichen wollen.aber Sie können die Flagge setzen. Wenn Flag Wert ist 1 dann nur onClick bearbeiten sonst nicht.

Unten Snippet wird Ihnen helfen.

Ja, aber Sie werden irgendwie die Flagge zu 1.

@Override 
     public void onClick(View v) 
      { 
      // TODO Auto-generated method stub 

       if(v.getId()==5000) 
       {  
       if(flag) 
       { 
        Log.d("ins", "called"); 
        Context mContext = Page1.this; 
        Dialog dialog = new Dialog(mContext); 
        dialog.setTitle("Instructions"); 
        dialog.setContentView(R.layout.instructiondialog); 
        dialog.show(); 
       } 
       flag=0; 
       } 
      } 
1

Sie können zurücksetzen müssen auch Schaltfläche klicken Ereignis wie dieses

Button ins = new Button(this); 
ins.setText("Instructions"); 
ins.setOnClickListener(this); 
ins.setId(5000); 

ins.setOnClickListener(new OnClickListener() 
{ 
    public void onClick(View v) 
    { 
     // TODO Auto-generated method stub 
     Context mContext = Page1.this; 
     Dialog dialog = new Dialog(mContext); 
     dialog.setTitle("Instructions"); 
     dialog.setContentView(R.layout.instructiondialog); 
     dialog.show(); 
    } 
}); 
+0

Vielen Dank .. das funktioniert –