2015-12-10 2 views
0

Я создал пользовательский вид и был добавлен в макет.Вызвать метод в пользовательском представлении от MainActivity.Java

<com.example.moynul.myapplication.Draw 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/view" 
    android:layout_above="@+id/button" 
    android:layout_alignRight="@+id/button2" 
    android:layout_alignEnd="@+id/button2" 
    android:layout_marginBottom="52dp" 
    /> 

Из этого не нужно создавать экземпляр класса Draw в классе MainActivity.

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
} 

Однако это имеет ограничения, поскольку я не могу вызвать метод в классе Draw.

public void buttonOnClick(View v) 
{ 
    switch (v.getId()) 
    { 
     case R.id.button: 
      //call a method in the Draw class 
      break; 
    } 
} 

Я попытался поворот моего Draw (что расширяет представление) в статический класс, и, повернувшись методом, который я хочу, чтобы получить доступ в общественном статическом методе. Но invalidate() не нравится.

Моя следующая попытка состояла в том, чтобы создать кнопку в пользовательском классе вида с помощью GUI-компоновщика. По-видимому, вы не можете сделать кнопку дочерним объектом пользовательского объекта вида.

Мой вопрос: Как я могу получить доступ к методу в классе Draw из основного класса?

ответ

3

Для ссылки на ваш Draw класс создать глобальную переменную в вашем MainActivity

Draw myDraw; 

Далее, установите его в onCreate

myDraw = (Draw) findViewById(R.id.view); 

Наконец, вызовите ее в buttonOnClick

case R.id.button: 
    myDraw.method(); 
    break; 

ИЛИ Если вы хотите, чтобы ссылаться на переменную в buttonOnClick вы можете просто сделать что-то вроде этого

case R.id.button: 
    ((Draw) findViewById(R.id.view)).method(); 
    break; 
+0

MyObject = (Object) findViewById (R .id.objectDrawnOnGUI); || Таким образом, это может работать, чтобы ссылаться на что-либо на экране устройства? Поэтому, если у меня есть слайдер, тогда слайдер слайдера = (слайдер) findViewById (R.id.mySlider); ? Код работает хорошо. – Moynul

+0

@Moynul это правильно. – ChrisStillwell

+0

А я вижу. Очень просто, как работают игровые движки, ссылаясь на игровые объекты через код. Отличная информация. – Moynul

2

Вы можете instante класс Рисовать как этот

Draw mDraw = (Draw) findViewById(R.id.view); 
mDraw.myMethod(); 
Смежные вопросы