OnClickListener установлен для действия

#android

#Android

Вопрос:

У меня есть класс someView, который расширяет представление и который отображается в элементах управления класса, расширяющих линейную компоновку.

Линейный макет создается при создании activity. Я хотел бы вызывать метод в activity каждый раз, когда я нажимаю на это представление someView. Я попытался установить OnClickListener в activity следующим образом

      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");
     } 
     }
  

Класс controls выглядит следующим образом

     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;
    }

}
  

и класс someView выглядит следующим образом (он просто рисует овал)

 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);

}
}
  

Но я что-то упускаю, потому что клики не вызывают метод onClick.
Что еще мне нужно настроить?

Комментарии:

1. можете ли вы показать нам свой код класса Controls?

2. Вы никогда не добавляли элементы управления в представление содержимого действия?

3. @AbdulAhad я добавил это к вопросу.

4. @cricket_007 Я сделал, я исправил это выше.

5. Хорошо, теперь нам нужно увидеть someView…

Ответ №1:

похоже, вы допустили ошибку только в своем классе MainActivity, где забыли вызвать метод super. Попробуйте сделать это, надеюсь, это сработает, так как он работает отсюда на моем мобильном телефоне.

Основное действие

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

    setContentView(menu);

}
  

И в вашем методе обратного вызова вместо использования System.out.println() используйте Log.d(), как показано ниже:

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

и он работает отсюда, посмотрите также на изображение ниже.

введите описание изображения здесь

Комментарии:

1. Интересно. У меня есть суперзвонок (забыл добавить его в код), но все равно не работает. Тогда у меня должна быть какая-то ошибка.

2. вы хотите распечатать «Привет» в консоли, прикоснувшись к зеленому овалу?

3. Да, просто как проверка, вызывается ли метод.

4. @JennyToy я изменил свой ответ, вы должны взглянуть на это. и убедитесь, что настройки консоли соответствуют моим