2016-10-03 2 views
2
eingestellt

Ich habe eine Klasse SomeView, die Ansicht erweitert und das in einer Klasse angezeigt wird Steuerelemente, die lineares Layout erweitert.onClickListener auf Aktivität

Das lineare Layout wird amCreate einer Aktivität instanziiert. Ich möchte eine Methode in der Aktivität jedes Mal aufrufen, wenn ich auf diese Ansicht SomeView klicke. Ich habe versucht, eine OnClickListener in der Tätigkeit zu setzen, wie dieses

 public class MainActivity extends AppCompatActivity implements 
    SomeView.OnClickListener { 

    private Controls menu; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     menu = new Controls(this); 
     menu.getSomeView().setOnClickListener(this); 

     setContentView(menu); 

    } 

    @Override 
    public void onClick(View view) { 
     System.out.println("Hello"); 
    } 
    } 

Die Kontrollen Klasse wie diese wie folgt

public class Controls extends LinearLayout { 

    private SomeView aview; 

    public Controls(Context context) { 
      super(context); 

      this.setOrientation(LinearLayout.HORIZONTAL); 

      aview = new SomeView(context); 

      this.addView(aview, new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); 
    } 

public SomeView getSomeView() { 
     return aview; 
    } 

} 

und die SomeView Klasse sieht aussieht (es zieht nur ein Oval)

public class SomeView extends View { 
public SomeView(Context context) { 

     super(context); 
    } 

@Override 
    protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 

     RectF aRect = new RectF(); 
     aRect.left = getPaddingLeft(); 
     aRect.top = getPaddingTop(); 
     aRect.right = getWidth() - getPaddingRight(); 
     aRect.bottom = getHeight() - getPaddingBottom(); 

     Paint aPaint = new Paint(Paint.ANTI_ALIAS_FLAG); 
     aPaint.setColor(Color.GREEN); 

     canvas.drawOval(aRect, aPaint); 

} 
} 

Aber ich vermisse etwas, weil Klicks nicht die OnClick-Methode aufrufen. Was muss ich noch einrichten?

+1

Können Sie uns Ihren Controls-Klassencode zeigen? – xFighter

+0

Sie haben der Inhaltsansicht der Aktivität nie Controls hinzugefügt? –

+0

@AbdulAhad Ich fügte es der Frage hinzu. – JennyToy

Antwort

1

Es scheint, als ob Sie nur Fehler in Ihrer MainActivity-Klasse gemacht haben, wo Sie vergessen haben, die Super-Methode aufzurufen. Versuche dies zu tun, hoffe es wird funktionieren, da es von hier in meinem Handy funktioniert.

Hauptaktivität

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    menu = new Controls(this); 
    menu.getSomeView().setOnClickListener(this); 

    setContentView(menu); 

} 

Und in Ihrer Callback-Methode, statt mit System.out.println() verwenden Log.d() wie folgt:

@Override 
public void onClick(View view) { 
    Log.d(TAG, "Hello"); 
} 

und es funktioniert von hier aus, schauen Sie sich auch das Bild unten an.

enter image description here

+0

Interessant. Ich habe den Super-Anruf (vergessen, es zum Code hinzuzufügen) aber funktioniert immer noch nicht. Irgendwann muss ich irgendwo einen Käfer haben. – JennyToy

+0

möchten Sie "Hallo" in der Konsole auf Touch das grüne Oval drucken? – xFighter

+0

Ja nur als Test, wenn die Methode aufgerufen wird. – JennyToy

Verwandte Themen