#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 я изменил свой ответ, вы должны взглянуть на это. и убедитесь, что настройки консоли соответствуют моим