2015-10-16 2 views
1

Поскольку я добавляю кнопку трансляции, которая поддерживает только классы, расширяющие класс ActivityFragment, мне было сложно, так как конкретный класс, который мне интересен, уже расширяет другой класс LinearLayout. Для того, чтобы избежать создания пользовательской кнопки, я сделал следующий обходной путь,Замена для расширения нескольких классов в Java

public class metaView extends LinearLayout { 
    private FragmentActivity fragmentActivity; 
    private void initViews() { 
     fragmentActivity = new FragmentActivity(){ 
      @Override 
      protected void onCreate(Bundle savedInstanceState){ 
        //Create Button Discovery... 

      } 
     }; 
    } 
} 

Однако, это не похоже на переопределен метод OnCreate никогда не вызывается. Кто-нибудь видит проблему с этой альтернативой? или это просто не сработает?

Заранее благодарен!

+1

Я не знаком с жизненным циклом Android, но, возможно, вам придется выполнять w/порядок событий, вызываемых вашими методами. Например, если обращение к переменной фрагментации происходит до вызова initViews(), то объект еще не был бы создан и как таковой не будет определять метод переопределения. Вы пробовали отлаживать это? – ryuu9187

+0

Спасибо за ответ! Я должен был прояснить это, но initViews будет доступен до фрагментации. Но даже если бы это было не так, функция фрагментации не могла быть доступна до initViews, поскольку она содержится внутри метода? – jensiepoo

+1

Ну, технически, я понятия не имею, как осуществляется обращение к фрагментации, или то, что вызывает onCreate(). Но да, я бы ожидал нулевой ссылки ex, если бы к ней обращались раньше. Что должно вызывать onCreate()? – ryuu9187

ответ

1

Как я добавляю кнопку произнесения, которая поддерживает только классы, которые расширяют класс ActivityFragment

Это не имеет никакого смысла. Независимо от того, вы не можете создать и использовать анонимный экземпляр Activity. Ваш макет должен быть настроен для отображения/скрытия кнопки и предоставления интерфейса для обработки щелчка на кнопке. Например ваш MetaView класс может иметь что-то вроде этого:

public interface OnCastButtonClickedListener { 
    void onCastButtonClicked(); 
} 

public void setCastButtonEnabled(boolean enabled) { 
    // Turn it on or off 
} 

public void setOnCastButtonClickedListener(OnCastButtonClickedListener l) { 
    // Assign some listener to delegate the button click to. 
} 

И затем, независимо от активности использует раскладку становится ответственным за показ/скрытие кнопки произнесения и обработки события щелчка.

+0

Я смотрю https://plus.google.com/+GoogleDevelopers/posts/ZHHe2tE7hcg. Ваше решение определенно работает, что похоже на третий вариант (настраиваемая кнопка), который я пытаюсь избежать. – jensiepoo

+1

Проверьте эту реализацию - я думаю, что это то, что вы хотите: https://github.com/googlecast/MediaRouter-Cast-Button-android/blob/master/src/com/example/mediarouter/MediaRouterActionBarButtonActivity.java – kcoppock

+0

Спасибо за помощь! Я действительно смотрел этот https://github.com/googlecast/MediaRouter-Cast-Button-android/blob/master/src/com/example/mediarouter/MediaRouterButtonActivity.java. Но это все равно не решило проблему? поскольку мой класс уже расширяет класс LinearLayout ... – jensiepoo

Смежные вопросы